<!DOCTYPE html>
<html lang="en-US" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>超好看Dashboard模板 | VitePress</title>
    <meta name="description" content="A VitePress site">
    <link rel="preload stylesheet" href="/notebook/assets/style.3dbfd0c2.css" as="style">
    
    <script type="module" src="/notebook/assets/app.8aaa4cbe.js"></script>
    <link rel="preload" href="/notebook/assets/inter-roman-latin.2ed14f66.woff2" as="font" type="font/woff2" crossorigin="">
    <link rel="modulepreload" href="/notebook/assets/chunks/framework.1336c4e5.js">
    <link rel="modulepreload" href="/notebook/assets/chunks/theme.20cddc0c.js">
    <link rel="modulepreload" href="/notebook/assets/项目实战_项目推荐.md.f9d97630.lean.js">
    <script id="check-dark-light">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
  </head>
  <body>
    <div id="app"><div class="Layout" data-v-255ec12d><!--[--><!--]--><!--[--><span tabindex="-1" data-v-ae3e3f51></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-ae3e3f51> Skip to content </a><!--]--><!----><header class="VPNav" data-v-255ec12d data-v-7e5bc4a5><div class="VPNavBar has-sidebar" data-v-7e5bc4a5 data-v-0937f67c><div class="container" data-v-0937f67c><div class="title" data-v-0937f67c><div class="VPNavBarTitle has-sidebar" data-v-0937f67c data-v-86d1bed8><a class="title" href="/notebook/" data-v-86d1bed8><!--[--><!--]--><!--[--><img class="VPImage logo" src="/notebook/Vue.png" alt data-v-8426fc1a><!--]--><!--[-->任硕的文档<!--]--><!--[--><!--]--></a></div></div><div class="content" data-v-0937f67c><div class="curtain" data-v-0937f67c></div><div class="content-body" data-v-0937f67c><!--[--><!--]--><div class="VPNavBarSearch search" style="--vp-meta-key:&#39;Meta&#39;;" data-v-0937f67c><!--[--><!----><div id="docsearch"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg class="DocSearch-Search-Icon" width="20" height="20" viewBox="0 0 20 20" aria-label="search icon"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-0937f67c data-v-7f418b0f><span id="main-nav-aria-label" class="visually-hidden" data-v-7f418b0f>Main Navigation</span><!--[--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-7f418b0f data-v-a7b5672a><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-a7b5672a><span class="text" data-v-a7b5672a><!----><span data-v-a7b5672a>Java学前端</span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-a7b5672a><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-a7b5672a><div class="VPMenu" data-v-a7b5672a data-v-e7ea1737><div class="items" data-v-e7ea1737><!--[--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><!----><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/Java%E5%AD%A6%E5%89%8D%E7%AB%AF/HTML+JS.html" data-v-2f2cfafc><!--[-->HTML+JS<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/Java%E5%AD%A6%E5%89%8D%E7%AB%AF/CSS.html" data-v-2f2cfafc><!--[-->CSS<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/Java%E5%AD%A6%E5%89%8D%E7%AB%AF/Vue2+%E7%BB%84%E4%BB%B6.html" data-v-2f2cfafc><!--[-->Vue2+组件<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/Java%E5%AD%A6%E5%89%8D%E7%AB%AF/Vue3+%E7%BB%84%E4%BB%B6.html" data-v-2f2cfafc><!--[-->Vue3+组件<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/Java%E5%AD%A6%E5%89%8D%E7%AB%AF/React.html" data-v-2f2cfafc><!--[-->React<!--]--></a></div><!--]--><!--]--></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-7f418b0f data-v-a7b5672a><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-a7b5672a><span class="text" data-v-a7b5672a><!----><span data-v-a7b5672a>软件测试</span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-a7b5672a><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-a7b5672a><div class="VPMenu" data-v-a7b5672a data-v-e7ea1737><div class="items" data-v-e7ea1737><!--[--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><!----><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/%E6%B5%8B%E8%AF%95%E5%9F%BA%E7%A1%80.html" data-v-2f2cfafc><!--[-->测试基础<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95.html" data-v-2f2cfafc><!--[-->压力测试<!--]--></a></div><!--]--><!--]--></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-7f418b0f data-v-a7b5672a><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-a7b5672a><span class="text" data-v-a7b5672a><!----><span data-v-a7b5672a>多线程</span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-a7b5672a><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-a7b5672a><div class="VPMenu" data-v-a7b5672a data-v-e7ea1737><div class="items" data-v-e7ea1737><!--[--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><!----><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/%E5%B9%B6%E5%8F%91%20&amp;%20%E5%A4%9A%E7%BA%BF%E7%A8%8B/%E5%9F%BA%E7%A1%80%E7%AF%87.html" data-v-2f2cfafc><!--[-->基础篇<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/%E5%B9%B6%E5%8F%91%20&amp;%20%E5%A4%9A%E7%BA%BF%E7%A8%8B/%E5%B9%B6%E5%8F%91%E5%AE%8C%E5%96%84.html" data-v-2f2cfafc><!--[-->进阶篇<!--]--></a></div><!--]--><!--]--></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-7f418b0f data-v-a7b5672a><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-a7b5672a><span class="text" data-v-a7b5672a><!----><span data-v-a7b5672a>开发工具</span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-a7b5672a><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-a7b5672a><div class="VPMenu" data-v-a7b5672a data-v-e7ea1737><div class="items" data-v-e7ea1737><!--[--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><!----><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/IDEA/Chrome.html" data-v-2f2cfafc><!--[-->Chrome<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/IDEA/IDEA%E5%9F%BA%E7%A1%80.html" data-v-2f2cfafc><!--[-->IDEA基础<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/IDEA/IDEA%E6%8F%92%E4%BB%B6.html" data-v-2f2cfafc><!--[-->IDEA插件<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/IDEA/VS%20Code.html" data-v-2f2cfafc><!--[-->VS Code<!--]--></a></div><!--]--><!--]--></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-7f418b0f data-v-a7b5672a><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-a7b5672a><span class="text" data-v-a7b5672a><!----><span data-v-a7b5672a>消息中间件</span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-a7b5672a><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-a7b5672a><div class="VPMenu" data-v-a7b5672a data-v-e7ea1737><div class="items" data-v-e7ea1737><!--[--><!--[--><div class="VPMenuGroup" data-v-e7ea1737 data-v-69e747b5><!----><!--[--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6/RabbitMQ.html" data-v-2f2cfafc><!--[-->RabbitMQ<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6/RocketMQ.html" data-v-2f2cfafc><!--[-->RocketMQ<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6/Kafka.html" data-v-2f2cfafc><!--[-->Kafka<!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-69e747b5 data-v-2f2cfafc><a class="VPLink link" href="/notebook/%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6/Canal.html" data-v-2f2cfafc><!--[-->Canal<!--]--></a></div><!--]--><!--]--></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-0937f67c data-v-f6a63727><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-f6a63727 data-v-82b282f1 data-v-f3c41672><span class="check" data-v-f3c41672><span class="icon" data-v-f3c41672><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-82b282f1><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-82b282f1><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-0937f67c data-v-0394ad82 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/renshuo123/renshuo123.github.io" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-f80f8133><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><a class="VPSocialLink no-icon" href="#" aria-label="twitter" target="_blank" rel="noopener" data-v-7bc22406 data-v-f80f8133><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/></svg></a><a class="VPSocialLink no-icon" href="https://github.com/" aria-label target="_blank" rel="noopener" data-v-7bc22406 data-v-f80f8133><svg t="1676028692954" class="icon" ...</path></svg></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-0937f67c data-v-40855f84 data-v-a7b5672a><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-a7b5672a><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-a7b5672a><circle cx="12" cy="12" r="2"></circle><circle cx="19" cy="12" r="2"></circle><circle cx="5" cy="12" r="2"></circle></svg></button><div class="menu" data-v-a7b5672a><div class="VPMenu" data-v-a7b5672a data-v-e7ea1737><!----><!--[--><!--[--><!----><div class="group" data-v-40855f84><div class="item appearance" data-v-40855f84><p class="label" data-v-40855f84>Appearance</p><div class="appearance-action" data-v-40855f84><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-40855f84 data-v-82b282f1 data-v-f3c41672><span class="check" data-v-f3c41672><span class="icon" data-v-f3c41672><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-82b282f1><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-82b282f1><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div></div></div><div class="group" data-v-40855f84><div class="item social-links" data-v-40855f84><div class="VPSocialLinks social-links-list" data-v-40855f84 data-v-7bc22406><!--[--><a class="VPSocialLink no-icon" href="https://github.com/renshuo123/renshuo123.github.io" aria-label="github" target="_blank" rel="noopener" data-v-7bc22406 data-v-f80f8133><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><a class="VPSocialLink no-icon" href="#" aria-label="twitter" target="_blank" rel="noopener" data-v-7bc22406 data-v-f80f8133><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Twitter</title><path d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/></svg></a><a class="VPSocialLink no-icon" href="https://github.com/" aria-label target="_blank" rel="noopener" data-v-7bc22406 data-v-f80f8133><svg t="1676028692954" class="icon" ...</path></svg></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-0937f67c data-v-e5dd9c1c><span class="container" data-v-e5dd9c1c><span class="top" data-v-e5dd9c1c></span><span class="middle" data-v-e5dd9c1c></span><span class="bottom" data-v-e5dd9c1c></span></span></button></div></div></div></div><!----></header><div class="VPLocalNav reached-top" data-v-255ec12d data-v-5cfd5582><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-5cfd5582><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="menu-icon" data-v-5cfd5582><path d="M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"></path><path d="M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"></path><path d="M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"></path><path d="M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"></path></svg><span class="menu-text" data-v-5cfd5582>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-5cfd5582 data-v-18201f51><button data-v-18201f51>Return to top</button><!----></div></div><aside class="VPSidebar" data-v-255ec12d data-v-845b8fc6><div class="curtain" data-v-845b8fc6></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-845b8fc6><span class="visually-hidden" id="sidebar-aria-label" data-v-845b8fc6> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>Java</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Java/Java%E5%9F%BA%E7%A1%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Java基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Java/Java%E6%96%B0%E7%89%B9%E6%80%A7.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Java新特性</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Java/Java%E8%BF%9B%E9%98%B6.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Java进阶</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Java/Java%E9%9B%86%E5%90%88.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Java集合</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Java/Java%E9%AB%98%E7%BA%A7.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Java高级</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>Linux</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Linux/Linux%E5%9F%BA%E7%A1%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Linux基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Linux/Linux%E8%BF%9B%E9%98%B6.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Linux新特性</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Linux/Shell.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Shell脚本</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Linux/%E5%AE%9E%E7%94%A8%E8%84%9A%E6%9C%AC.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>实用脚本</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Linux/%E8%BD%AF%E4%BB%B6%E9%83%A8%E7%BD%B2.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>软件部署</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>Nginx</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Nginx/%E5%9F%BA%E7%A1%80%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>基础篇</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Nginx/%E8%BF%9B%E9%98%B6%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>进阶篇</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Nginx/%E5%AE%9E%E6%88%98%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>实战篇</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Nginx/%E9%9D%A2%E8%AF%95%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>面试篇</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>SSM</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/SSM/Maven.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Maven</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/SSM/Spring.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Spring</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/SSM/SpringMVC.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>SpringMVC</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/SSM/SpringBatch.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>SpringBatch</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>SpringBoot</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/3%E3%80%81SpringBoot/%E5%9F%BA%E7%A1%80%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>基础篇</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/3%E3%80%81SpringBoot/%E5%BA%94%E7%94%A8%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>应用篇</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/3%E3%80%81SpringBoot/%E6%96%B0%E7%89%B9%E6%80%A7.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>新特性</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/3%E3%80%81SpringBoot/%E8%BF%90%E7%BB%B4&amp;%E5%8E%9F%E7%90%86.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>运维&原理</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>SpringCloud</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/4%E3%80%81%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E8%BF%9B%E9%98%B6.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>SpringCloud</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/4%E3%80%81%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%BF%85%E5%A4%87/Sentinel.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Sentinel</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>SpringSecurity</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/4%E3%80%81%E5%BE%AE%E6%9C%8D%E5%8A%A1/SpringSecurity/%E5%9F%BA%E7%A1%80%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>SpringSecurity基础篇</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/4%E3%80%81%E5%BE%AE%E6%9C%8D%E5%8A%A1/SpringSecurity/%E8%BF%9B%E9%98%B6%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>SpringSecurity进阶篇</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/4%E3%80%81%E5%BE%AE%E6%9C%8D%E5%8A%A1/SpringSecurity/%E9%AB%98%E7%BA%A7%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>SpringSecurity高级篇</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>Mybatis & MybatisPlus</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Mybatis&amp;MybatisPlus/Mybatis.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Mybatis</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Mybatis&amp;MybatisPlus/MybatisPlus.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>MybatisPlus</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/Mybatis&amp;MybatisPlus/JPA.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>JPA</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>Git & ChatGPT</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/5%E3%80%81%E8%BF%90%E7%BB%B4/Git.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Git</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/5%E3%80%81%E8%BF%90%E7%BB%B4/Github.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Github</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/5%E3%80%81%E8%BF%90%E7%BB%B4/ChatGPT.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>ChatGPT</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/5%E3%80%81%E8%BF%90%E7%BB%B4/Jenkins.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Jenkins</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/5%E3%80%81%E8%BF%90%E7%BB%B4/Netty.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Netty</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>数据库</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>MySQL</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/MySQL/MySQL%E6%A0%B8%E5%BF%83/%E5%9F%BA%E7%A1%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>MySQL基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/MySQL/MySQL%E6%A0%B8%E5%BF%83/%E8%BF%9B%E9%98%B6.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>MySQL进阶</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/MySQL/MySQL%E6%A0%B8%E5%BF%83/%E4%BC%98%E5%8C%96.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>MySQL优化</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/MySQL/MySQL%E6%A0%B8%E5%BF%83/%E8%AE%BE%E8%AE%A1.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>MySQL设计</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/MySQL/MySQL%E6%A0%B8%E5%BF%83/%E8%BF%90%E7%BB%B4.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>MySQL运维</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/MySQL/%E5%88%86%E5%BA%93%E5%88%86%E8%A1%A8.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>分库分表</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>Redis</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/Redis/Redis%E5%9F%BA%E7%A1%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Redis基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/Redis/Redis%E4%BC%98%E5%8C%96.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Redis优化</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/Redis/Redis%E5%8E%9F%E7%90%86.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Redis原理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/Redis/Redis%E9%AB%98%E7%BA%A7.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Redis高级</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/Redis/Redis%E5%AE%9E%E6%88%98.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Redis实战</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/Redis/%E6%9C%AC%E5%9C%B0%E7%BC%93%E5%AD%98.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>本地缓存</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>MongoDB</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/MongoDB/%E5%9F%BA%E7%A1%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>MongoDB基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/MongoDB/%E6%95%B4%E5%90%88.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>MongoDB进阶</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>ElasticSearch</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/ElasticSearch/1%E3%80%81ES%E5%9F%BA%E7%A1%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>ES基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/ElasticSearch/3%E3%80%81ES%E9%AB%98%E7%BA%A7.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>ES高级</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/influxdb.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>InfluxDB</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/2%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93/Neo4j.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Neo4j</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>高并发 & 秒杀 & 分布式</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E4%B8%89%E9%AB%98/%E5%88%86%E5%B8%83%E5%BC%8F.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>分布式理论</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/4%E3%80%81%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%BF%85%E5%A4%87/%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>分布式锁</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E4%B8%89%E9%AB%98/%E7%A7%92%E6%9D%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>秒杀</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E4%B8%89%E9%AB%98/%E9%AB%98%E5%8F%AF%E7%94%A8.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>高可用</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E4%B8%89%E9%AB%98/%E9%AB%98%E5%B9%B6%E5%8F%91.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>高并发</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>云原生</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E4%BA%91%E5%8E%9F%E7%94%9F/Docker.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Docker</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E4%BA%91%E5%8E%9F%E7%94%9F/K8S.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>K8S</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>可视化 & 监控</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E5%8F%AF%E8%A7%86%E5%8C%96%20&amp;%20%E7%9B%91%E6%8E%A7/%E7%9B%91%E6%8E%A7%E5%9F%BA%E7%A1%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>监控基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E5%8F%AF%E8%A7%86%E5%8C%96%20&amp;%20%E7%9B%91%E6%8E%A7/%E7%9B%91%E6%8E%A7%E8%BF%9B%E9%98%B6.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>监控进阶</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E5%8F%AF%E8%A7%86%E5%8C%96%20&amp;%20%E7%9B%91%E6%8E%A7/%E5%8F%AF%E8%A7%86%E5%8C%96%E5%A4%A7%E5%B1%8F.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>可视化大屏</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E5%8F%AF%E8%A7%86%E5%8C%96%20&amp;%20%E7%9B%91%E6%8E%A7/Zabbix.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Zabbix</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>学前端</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>HTML+CSS</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/1%E3%80%81HTML+CSS/HTML%E5%9F%BA%E7%A1%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>HTML基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/1%E3%80%81HTML+CSS/CSS%E5%9F%BA%E7%A1%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>CSS基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/1%E3%80%81HTML+CSS/%E7%BD%91%E9%A1%B5%E8%BF%9B%E9%98%B6.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>网页进阶</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>JS+TS</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/2%E3%80%81JS+TS/JS%20%E5%9F%BA%E7%A1%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>JS基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/2%E3%80%81JS+TS/JS%20%E8%BF%9B%E9%98%B6.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>JS进阶</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/2%E3%80%81JS+TS/ES6%20%E5%9F%BA%E7%A1%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>ES6基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/2%E3%80%81JS+TS/ES6%20%E8%BF%9B%E9%98%B6.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>ES6进阶</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/2%E3%80%81JS+TS/TypeScript.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>TS基础</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>NodeJS</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/4%E3%80%81Node/%E5%9F%BA%E7%A1%80%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Node基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/4%E3%80%81Node/%E8%BF%9B%E9%98%B6%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Node进阶</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/4%E3%80%81Node/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>项目实战</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>Vue</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/3%E3%80%81Vue/Vue3/Vue3%E8%BF%9B%E9%98%B6.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Vue3进阶</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/3%E3%80%81Vue/Vue3/Vue3%E9%AB%98%E7%BA%A7.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Vue3高级</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/3%E3%80%81Vue/Vue3/Vue3%E6%96%B0%E8%AF%AD%E6%B3%95.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>Vue3新语法</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/3%E3%80%81Vue/Vue2/Vue2%E9%A1%B9%E7%9B%AE.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>项目实战</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>小程序</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/5%E3%80%81%E5%B0%8F%E7%A8%8B%E5%BA%8F/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>小程序基础</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/5%E3%80%81%E5%B0%8F%E7%A8%8B%E5%BA%8F/%E5%B0%8F%E7%A8%8B%E5%BA%8F%E4%BC%98%E5%8C%96.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>小程序优化</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/5%E3%80%81%E5%B0%8F%E7%A8%8B%E5%BA%8F/uniapp.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>uniapp</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/1%E3%80%81%E5%AD%A6%E5%89%8D%E7%AB%AF/5%E3%80%81%E5%B0%8F%E7%A8%8B%E5%BA%8F/%E5%B0%8F%E7%A8%8B%E5%BA%8F%E9%A1%B9%E7%9B%AE.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>项目实战</p><!--]--></a><!----></div><!----></div><!--]--></div></section><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible collapsed" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>计算机基础</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E5%9F%BA%E7%A1%80%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>数据结构</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>操作系统</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E5%9F%BA%E7%A1%80%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>设计模式</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>计算机网络</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/UML.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>UML</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E7%AE%97%E6%B3%95/LeetCode.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>LeetCode</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0 collapsible has-active" data-v-845b8fc6 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h2 class="text" data-v-9b797284>项目实战</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>云尚办公</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E4%BA%91%E5%B0%9A%E5%8A%9E%E5%85%AC/%E5%9F%BA%E7%A1%80%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>基础篇</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>小兔鲜</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E5%B0%8F%E5%85%94%E9%B2%9C/%E5%9F%BA%E7%A1%80%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>基础篇</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E5%B0%8F%E5%85%94%E9%B2%9C/%E8%BF%9B%E9%98%B6%E7%AF%871.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>进阶篇1</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E5%B0%8F%E5%85%94%E9%B2%9C/%E8%BF%9B%E9%98%B6%E7%AF%872.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>进阶篇2</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>地图</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BE/%E5%9F%BA%E7%A1%80%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>基础篇</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BE/%E8%BF%9B%E9%98%B6%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>进阶篇</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>苍穹外卖</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E8%8B%8D%E7%A9%B9%E5%A4%96%E5%8D%96/%E8%BF%9B%E9%98%B6%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>进阶篇</p><!--]--></a><!----></div><!----></div><!--]--></div></section><section class="VPSidebarItem level-1 collapsible collapsed" data-v-9b797284 data-v-9b797284><div class="item" role="button" tabindex="0" data-v-9b797284><div class="indicator" data-v-9b797284></div><h3 class="text" data-v-9b797284>黑马头条</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-9b797284><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-9b797284><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1/%E5%9F%BA%E7%A1%80%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>基础篇</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1/%E8%BF%9B%E9%98%B6%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>进阶篇</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1/%E8%BF%9B%E9%98%B6%E7%AF%872.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>进阶篇2</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E9%BB%91%E9%A9%AC%E5%A4%B4%E6%9D%A1/%E9%AB%98%E7%BA%A7%E7%AF%87.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>高级篇</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E6%94%AF%E4%BB%98.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>支付</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E9%A1%B9%E7%9B%AE%E6%8E%A8%E8%8D%90.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>项目推荐</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-845b8fc6><section class="VPSidebarItem level-0" data-v-845b8fc6 data-v-9b797284><!----><div class="items" data-v-9b797284><!--[--><div class="VPSidebarItem level-1 is-link" data-v-9b797284 data-v-9b797284><div class="item" data-v-9b797284><div class="indicator" data-v-9b797284></div><a class="VPLink link link" href="/notebook/team.html" data-v-9b797284><!--[--><p class="text" data-v-9b797284>团队成员</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-255ec12d data-v-669faec9><div class="VPDoc has-sidebar has-aside" data-v-669faec9 data-v-6b87e69f><!--[--><!--]--><div class="container" data-v-6b87e69f><div class="aside" data-v-6b87e69f><div class="aside-curtain" data-v-6b87e69f></div><div class="aside-container" data-v-6b87e69f><div class="aside-content" data-v-6b87e69f><div class="VPDocAside" data-v-6b87e69f data-v-3f215769><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" data-v-3f215769 data-v-ff0f39c8><div class="content" data-v-ff0f39c8><div class="outline-marker" data-v-ff0f39c8></div><div class="outline-title" data-v-ff0f39c8>On this page</div><nav aria-labelledby="doc-outline-aria-label" data-v-ff0f39c8><span class="visually-hidden" id="doc-outline-aria-label" data-v-ff0f39c8> Table of Contents for current page </span><ul class="root" data-v-ff0f39c8 data-v-d0ee3533><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-3f215769></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-6b87e69f><div class="content-container" data-v-6b87e69f><!--[--><!--]--><!----><main class="main" data-v-6b87e69f><div style="position:relative;" class="vp-doc _notebook_%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98_%E9%A1%B9%E7%9B%AE%E6%8E%A8%E8%8D%90" data-v-6b87e69f><div><h1 id="超好看dashboard模板" tabindex="-1">超好看Dashboard模板 <a class="header-anchor" href="#超好看dashboard模板" aria-label="Permalink to &quot;超好看Dashboard模板&quot;">​</a></h1><p>Web 开发中几乎的平台都需要一个后台管理，但是从零开发一套后台控制面板并不容易，幸运的是有很多开源免费的后台控制面板可以给开发者使用，那么有哪些优秀的开源免费的控制面板呢？我在 Github 上收集了一些优秀的后台控制面板，并总结得出 Top 10。</p><h2 id="adminlte" tabindex="-1">AdminLTE <a class="header-anchor" href="#adminlte" aria-label="Permalink to &quot;AdminLTE&quot;">​</a></h2><p>Github Star 数 35969 ， Github 地址：</p><blockquote><p><a href="https://github.com/almasaeed2010/AdminLTE" target="_blank" rel="noreferrer">https://github.com/almasaeed2010/AdminLTE</a></p></blockquote><p>非常流行的基于 Bootstrap 3.x 的免费的后台 UI 框架。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304201648494.png" alt="image-20230420164852408" style="zoom:80%;"><h2 id="vue-element-admin" tabindex="-1">vue-Element-Admin <a class="header-anchor" href="#vue-element-admin" aria-label="Permalink to &quot;vue-Element-Admin&quot;">​</a></h2><p>Github Star 数 56546， Github 地址：</p><blockquote><p><a href="https://github.com/PanJiaChen/vue-element-admin" target="_blank" rel="noreferrer">https://github.com/PanJiaChen/vue-element-admin</a></p></blockquote><p>一个基于 vue2.0 和 Eelement 的控制面板 UI 框架。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304201648013.png" alt="image-20230420164841927" style="zoom:80%;"><h2 id="tabler" tabindex="-1">tabler <a class="header-anchor" href="#tabler" aria-label="Permalink to &quot;tabler&quot;">​</a></h2><p>Github Star 数 15870， Github 地址：</p><blockquote><p><a href="https://github.com/tabler/tabler" target="_blank" rel="noreferrer">https://github.com/tabler/tabler</a></p></blockquote><p>构建在 BootStrap 4 之上的免费的 HTML 控制面板框架</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304201648343.png" alt="image-20230420164830265" style="zoom:80%;"><h2 id="gentelella" tabindex="-1">Gentelella <a class="header-anchor" href="#gentelella" aria-label="Permalink to &quot;Gentelella&quot;">​</a></h2><p>Github Star 数 15654， Github 地址：</p><blockquote><p><a href="https://github.com/puikinsh/gentelella" target="_blank" rel="noreferrer">https://github.com/puikinsh/gentelella</a></p></blockquote><p>一个基于 Bootstarp 的免费的后台控制面板。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304201648423.png" alt="image-20230420164820327" style="zoom:80%;"><h2 id="ng2-admin" tabindex="-1">ng2-admin <a class="header-anchor" href="#ng2-admin" aria-label="Permalink to &quot;ng2-admin&quot;">​</a></h2><p>Github Star 数 13181， Github 地址：</p><blockquote><p><a href="https://github.com/akveo/ngx-admin" target="_blank" rel="noreferrer">https://github.com/akveo/ngx-admin</a></p></blockquote><p>基于 Angular 2, Bootstrap 4 和 Webpack 的后台管理面板框架。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304201648390.png" alt="image-20230420164810288" style="zoom:80%;"><h2 id="ant-design-pro" tabindex="-1">ant-design-pro <a class="header-anchor" href="#ant-design-pro" aria-label="Permalink to &quot;ant-design-pro&quot;">​</a></h2><p>Github Star 数 12707，Github 地址：</p><blockquote><p><a href="https://github.com/ant-design/ant-design-pro" target="_blank" rel="noreferrer">https://github.com/ant-design/ant-design-pro</a></p></blockquote><p>开箱即用的中台前端/设计解决方案</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304201648130.png" alt="image-20230420164801056" style="zoom:80%;"><h2 id="blur-admin" tabindex="-1">blur-admin <a class="header-anchor" href="#blur-admin" aria-label="Permalink to &quot;blur-admin&quot;">​</a></h2><p>Github Star 数 9241，Github 地址：</p><blockquote><p><a href="https://github.com/akveo/blur-admin" target="_blank" rel="noreferrer">https://github.com/akveo/blur-admin</a></p></blockquote><p>基于 Angular 和 Bootstrap 的后台管理面板框架。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304201647901.png" alt="image-20230420164750744" style="zoom:80%;"><h2 id="vue-admin" tabindex="-1">vue-admin <a class="header-anchor" href="#vue-admin" aria-label="Permalink to &quot;vue-admin&quot;">​</a></h2><p>Github Star 数 8676，Github 地址：</p><blockquote><p><a href="https://github.com/vue-bulma/vue-admin" target="_blank" rel="noreferrer">https://github.com/vue-bulma/vue-admin</a></p></blockquote><p>基于 Vue 和 Bulma 的控制面板。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304201647945.png" alt="image-20230420164740872" style="zoom:80%;"><h2 id="iview-admin" tabindex="-1">iview-admin <a class="header-anchor" href="#iview-admin" aria-label="Permalink to &quot;iview-admin&quot;">​</a></h2><p>Github Star 数 8668，Github 地址：</p><blockquote><p><a href="https://github.com/iview/iview-admin" target="_blank" rel="noreferrer">https://github.com/iview/iview-admin</a></p></blockquote><p>基于 iView 的 Vue 2.0 控制面板。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304201647212.png" alt="image-20230420164727113" style="zoom:80%;"><h2 id="material-dashboard" tabindex="-1">material-dashboard <a class="header-anchor" href="#material-dashboard" aria-label="Permalink to &quot;material-dashboard&quot;">​</a></h2><p>Github Star 数 7111，Github 地址：</p><blockquote><p><a href="https://github.com/creativetimofficial/material-dashboard" target="_blank" rel="noreferrer">https://github.com/creativetimofficial/material-dashboard</a></p></blockquote><p>基于 Bootstrap 4 和 Material 风格的控制面板。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304201646154.png" alt="image-20230420164612041" style="zoom:80%;"><h1 id="高质量的java开源项目" tabindex="-1">高质量的Java开源项目 <a class="header-anchor" href="#高质量的java开源项目" aria-label="Permalink to &quot;高质量的Java开源项目&quot;">​</a></h1><p>推荐项目概览：</p><ul><li>Jeepay：开源支付系统</li><li>document-sharing-site：文档在线检索预览</li><li>asyncTool：并行框架</li><li>Helidon：用于编写微服务程序的 Java 库</li><li>AgileBoot-Back-End：快速开发脚手架</li></ul><h2 id="jeepay-开源支付系统" tabindex="-1">Jeepay：开源支付系统 <a class="header-anchor" href="#jeepay-开源支付系统" aria-label="Permalink to &quot;Jeepay：开源支付系统&quot;">​</a></h2><p><img src="https://mmbiz.qpic.cn/mmbiz_svg/qbvaL9taELuibia22yaP9gUIAfzDGasRkA88yv8aRHic0d5jQmLPP1MhjrpupkqtlANRXXgRwFYdwIiaQfOjIUt978OnlIL87dj8/640?wx_fmt=svg&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h3 id="项目介绍" tabindex="-1">项目介绍 <a class="header-anchor" href="#项目介绍" aria-label="Permalink to &quot;项目介绍&quot;">​</a></h3><ul><li>一套适合互联网企业使用的开源支付系统，提供了交易、退款、转账、分账等开箱即用的功能，支持服务商特约商户和普通商户接口。</li><li>目前已对接微信，支付宝，云闪付，京东支付，盛付通，农业银行官方接口，支持聚合码支付。</li><li>后端基于 Spring Boot + Spring Security + MySQL + ，前端基于 Ant Design Vue，支持分布式部署，提供高并发支持。</li></ul><h3 id="系统架构" tabindex="-1">系统架构 <a class="header-anchor" href="#系统架构" aria-label="Permalink to &quot;系统架构&quot;">​</a></h3><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibOywM9GxBlSicto7iah9GVUXdp7MZrGQb68rKoK2Nxyia9MDClyDKNj3AQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">Jeepay系统架构图</p><h3 id="支付流程图" tabindex="-1">支付流程图 <a class="header-anchor" href="#支付流程图" aria-label="Permalink to &quot;支付流程图&quot;">​</a></h3><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibrqI4hU8UfAQdeQ1HsETeF3lefcicZUd8GoySnCcFa0YmKW6YbPiaQ3AQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">Jeepay计全支付聚合码支付流程图</p><h3 id="效果图" tabindex="-1">效果图 <a class="header-anchor" href="#效果图" aria-label="Permalink to &quot;效果图&quot;">​</a></h3><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibtsUBJXR8IrTgerIDAcgXXFicPfo0T1WsMicX1508Mic15hT5iaKm1hWlKA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">Jeepay演示界面</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibhj49WyaQQ2huRsQdna8t5MhMoV41wTsiaJMvJsQus7eZBD6TwtKibNmw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">Jeepay演示界面</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibxOIzjZeaLSAtNo0VLN6XqhWfKrBuFF9Sz2p1H3dw3k1qMDU5A2pGFg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">Jeepay演示界面</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibcOybBZllpzpZcOQ9r3DUlwnaOv7bJjEIxaNib7fgpMeTNeeKnmefC6A/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">Jeepay演示界面</p><h3 id="相关地址" tabindex="-1">相关地址 <a class="header-anchor" href="#相关地址" aria-label="Permalink to &quot;相关地址&quot;">​</a></h3><ul><li>项目地址：<a href="https://gitee.com/jeequan/jeepay" target="_blank" rel="noreferrer">https://gitee.com/jeequan/jeepay</a></li><li>项目文档：<a href="https://docs.jeequan.com/docs/jeepay" target="_blank" rel="noreferrer">https://docs.jeequan.com/docs/jeepay</a></li><li>支付流程体验：<a href="https://www.jeequan.com/demo/jeepay_cashier.html" target="_blank" rel="noreferrer">https://www.jeequan.com/demo/jeepay_cashier.html</a></li><li>运营平台和商户系统演体验：<a href="https://www.jeequan.com/doc/detail_84.html" target="_blank" rel="noreferrer">https://www.jeequan.com/doc/detail_84.html</a></li></ul><h2 id="document-sharing-site-文档在线检索预览" tabindex="-1">document-sharing-site：文档在线检索预览 <a class="header-anchor" href="#document-sharing-site-文档在线检索预览" aria-label="Permalink to &quot;document-sharing-site：文档在线检索预览&quot;">​</a></h2><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibGdiblM1NBdg2YJ0BLjwf4EVKVa3L3wqwWvvCXBy1iajaD4Pge2aVs9nQ/640?wx_fmt=jpeg&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h3 id="项目介绍-1" tabindex="-1">项目介绍 <a class="header-anchor" href="#项目介绍-1" aria-label="Permalink to &quot;项目介绍&quot;">​</a></h3><ul><li>一个支持几乎所有类型（Word, Excel, PPT, PDF, Pic 等）的文档存储、在线预览、共享的开源项目。</li><li>后端基于 Spring Boot + Hutool + Tika(内容分析工具包) + Elasticsearch + JWT，前端基于 Vue + axios。</li></ul><h3 id="效果图-1" tabindex="-1">效果图 <a class="header-anchor" href="#效果图-1" aria-label="Permalink to &quot;效果图&quot;">​</a></h3><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibg4vmgHU0rUlt4CibUPCLFzCZXAa9D1xYumloseFw05ufgRaJ4oW9ZZA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">首页</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLib7Z854DkPYCumfkvSrbicq4AmVxJqZvNO8Ye9GvNGCUvHHPe3Ocg66Og/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">搜索</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibBibDuQBwqKyOc7l6ib0iaKMrZg93yR0Lia4oRicQySLD35YM183RazWia7hw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">文档管理</p><h3 id="相关地址-1" tabindex="-1">相关地址 <a class="header-anchor" href="#相关地址-1" aria-label="Permalink to &quot;相关地址&quot;">​</a></h3><ul><li>项目地址：<a href="https://github.com/Jarrettluo/document-sharing-site" target="_blank" rel="noreferrer">https://github.com/Jarrettluo/document-sharing-site</a></li><li>在线体验：<a href="http://81.69.247.172/#/" target="_blank" rel="noreferrer">http://81.69.247.172/#/</a></li></ul><h2 id="asynctool-并行框架" tabindex="-1">asyncTool：并行框架 <a class="header-anchor" href="#asynctool-并行框架" aria-label="Permalink to &quot;asyncTool：并行框架&quot;">​</a></h2><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibl9OZGkIe1E9AxJh5Hhw85xHgRhfPdWwA1LEHAYJfZwdo3SWYhtT7UQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h3 id="项目介绍-2" tabindex="-1">项目介绍 <a class="header-anchor" href="#项目介绍-2" aria-label="Permalink to &quot;项目介绍&quot;">​</a></h3><ul><li>京东的一位大佬开源的多线程工具库，里面大量使用到了 <code>CompletableFuture</code> ，可以解决任意的多线程并行、串行、阻塞、依赖、回调的并行框架，可以任意组合各线程的执行顺序，带全链路执行结果回调。</li><li>该框架目前正在 京东 App 后台 接受苛刻、高并发、海量用户等复杂场景业务的检验测试。</li></ul><h3 id="效果图-任务编排-最常用的应用场景" tabindex="-1">效果图（任务编排，最常用的应用场景） <a class="header-anchor" href="#效果图-任务编排-最常用的应用场景" aria-label="Permalink to &quot;效果图（任务编排，最常用的应用场景）&quot;">​</a></h3><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibk63hUQwD3LD6IxpwCX8FS1JuqLp8GJ3iawL0pn1WEPNibJUC9uia7hhdQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h3 id="相关地址-2" tabindex="-1">相关地址 <a class="header-anchor" href="#相关地址-2" aria-label="Permalink to &quot;相关地址&quot;">​</a></h3><ul><li>项目地址：<a href="https://gitee.com/jd-platform-opensource/asyncTool" target="_blank" rel="noreferrer">https://gitee.com/jd-platform-opensource/asyncTool</a></li><li>入门教程：<a href="https://gitee.com/jd-platform-opensource/asyncTool/blob/master/QuickStart.md" target="_blank" rel="noreferrer">https://gitee.com/jd-platform-opensource/asyncTool/blob/master/QuickStart.md</a></li></ul><h2 id="helidon-用于编写微服务程序的-java-库" tabindex="-1">Helidon：用于编写微服务程序的 Java 库 <a class="header-anchor" href="#helidon-用于编写微服务程序的-java-库" aria-label="Permalink to &quot;Helidon：用于编写微服务程序的 Java 库&quot;">​</a></h2><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLib2o5UicbHqgAIvgOOX3t7oslWQibCpRiaCzDfTs6Y52exsKVJib1aCQsS2Q/640?wx_fmt=jpeg&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h3 id="项目介绍-3" tabindex="-1">项目介绍 <a class="header-anchor" href="#项目介绍-3" aria-label="Permalink to &quot;项目介绍&quot;">​</a></h3><ul><li>一组 Java 库，用于编写在由 Netty 提供支持的快速 Web 核心上运行的微服务。它体积小，速度快，使用起来很有趣。</li><li>Helidon 拥抱云原生，全面支持 GraalVM Native Image。</li></ul><h3 id="相关地址-3" tabindex="-1">相关地址 <a class="header-anchor" href="#相关地址-3" aria-label="Permalink to &quot;相关地址&quot;">​</a></h3><ul><li>项目地址：<a href="https://github.com/helidon-io/helidon" target="_blank" rel="noreferrer">https://github.com/helidon-io/helidon</a></li><li>官网：<a href="https://helidon.io/" target="_blank" rel="noreferrer">https://helidon.io/</a></li></ul><h2 id="agileboot-back-end-快速开发脚手架" tabindex="-1">AgileBoot-Back-End：快速开发脚手架 <a class="header-anchor" href="#agileboot-back-end-快速开发脚手架" aria-label="Permalink to &quot;AgileBoot-Back-End：快速开发脚手架&quot;">​</a></h2><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibNiazDlrXeUIUDllfbxFdQr774T0fxkJUtxlnNkbspG2X6ZTnKAsJiahA/640?wx_fmt=jpeg&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h3 id="项目介绍-4" tabindex="-1">项目介绍 <a class="header-anchor" href="#项目介绍-4" aria-label="Permalink to &quot;项目介绍&quot;">​</a></h3><ul><li>基于 Ruoyi 做了大量重构优化的基础快速开发框架，解决了 Ruoyi 项目存在的一些问题比如命名比较乱七八糟、项目分包以及模块比较乱、一大堆自己造的轮子（且没有单测覆盖）。</li><li>后端基于 Spring Boot + Spring Security + Redis + Mybatis Plus + MySQL，前端基于 Vue3 + Element UI。</li></ul><h3 id="重构内容" tabindex="-1">重构内容 <a class="header-anchor" href="#重构内容" aria-label="Permalink to &quot;重构内容&quot;">​</a></h3><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibGa3F2d0ibFmNur50luHjpm2jVOf5IIXcQMyvXJzicgs2pgzNUta8fFNg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h3 id="效果图-2" tabindex="-1">效果图 <a class="header-anchor" href="#效果图-2" aria-label="Permalink to &quot;效果图&quot;">​</a></h3><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLib0haSAfXMLedpGncoVEXU2wQTHjpJ5pDK7f9QdkHonYybxuatbh9dRQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">后台首页</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibnjYw6VlocqDj7xYIsibzCVG3lWxLooEuqQ7icVPicqnSVepnVTVgG0kPw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">用户管理</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9TyxPX2xLSnKo2NHg3m14zLibpPia8AMbJsuhwKN1RLk9tjQoKMkpueL2R3EI6cddJxoYKhDHWhRFwJw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">角色管理</p><h3 id="相关地址-4" tabindex="-1">相关地址 <a class="header-anchor" href="#相关地址-4" aria-label="Permalink to &quot;相关地址&quot;">​</a></h3><ul><li>项目地址：<a href="https://github.com/valarchie/AgileBoot-Back-End" target="_blank" rel="noreferrer">https://github.com/valarchie/AgileBoot-Back-End</a></li><li>在线演示：www.agileboot.vip（暂时挂掉了，账号密码：admin/admin123）</li><li>详细介绍：<a href="https://www.cnblogs.com/valarchie/p/16777336.html" target="_blank" rel="noreferrer">https://www.cnblogs.com/valarchie/p/16777336.html</a></li></ul><h1 id="开源物联网智能家居系统" tabindex="-1">开源物联网智能家居系统 <a class="header-anchor" href="#开源物联网智能家居系统" aria-label="Permalink to &quot;开源物联网智能家居系统&quot;">​</a></h1><blockquote><p>大家好，我是热爱分享优质开源项目的 Guide！今天推荐的一个可以用来二次开发和学习的开源的软硬件系统，你可以用快速搭建自己的智能家居系统。</p></blockquote><img src="https://mmbiz.qpic.cn/mmbiz_png/BcyAypujBVbzXLn1r2mJMMg4b6JGs1qJKoIS2T6lJeJU4nOFnibQWhlH1rHxyWAB9OxEnDicACASyzQCg82lwdTA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片" style="zoom:67%;"><p>项目的效果图如下，不论是 UI 设计还是功能体验都是非常不错的！这也是我为什么给小伙伴们推荐这个项目的原因。</p><p>下面这两张图是 APP 端的效果图。</p><img src="https://mmbiz.qpic.cn/mmbiz_png/BcyAypujBVbzXLn1r2mJMMg4b6JGs1qJHJSLSJGQJhib2HrGD1T0NfhfTplIAWfOQFYGY7QA1RvCqhWZQ21QL2w/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片" style="zoom:67%;"><img src="https://mmbiz.qpic.cn/mmbiz_png/BcyAypujBVbzXLn1r2mJMMg4b6JGs1qJB6uX2j57H2oefx39wuuubckMcicOQicWQH3dSDEBpvvWu65qDh05uDicQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片" style="zoom:67%;"><p>下面这两张是 Web 管理后端的效果图。</p><img src="https://mmbiz.qpic.cn/mmbiz_png/BcyAypujBVbzXLn1r2mJMMg4b6JGs1qJTmgv5UktMt43cXW0Z7Il3ImgzibCYBM2avWsicA7IL98jRQJ1SG2F2FQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片" style="zoom:67%;"><img src="https://mmbiz.qpic.cn/mmbiz_png/BcyAypujBVbzXLn1r2mJMMg4b6JGs1qJ1CVmgx1d4jGmYMDdVJhGDSRXxnKfeHL6TYW06HW7FJicgkAVvLHq5sg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片" style="zoom:67%;"><img src="https://mmbiz.qpic.cn/mmbiz_png/BcyAypujBVbzXLn1r2mJMMg4b6JGs1qJCU2YAYGws6Xt01HBPetW0XvvJ8JcbF9fSl0UfwwibcEib52p8HSpYLHA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片" style="zoom:67%;"><p>是不是感觉还挺不错的？想要学习物联网开发的小伙伴一定不要错过。</p><p>这个项目涉及到的技术点还是很多的，既有前端又有后端，还有安卓和硬件开发。</p><p>整个项目的技术架构示意图如下图所示：</p><img src="https://mmbiz.qpic.cn/mmbiz_png/BcyAypujBVbzXLn1r2mJMMg4b6JGs1qJfFMeqrb3VLyrBon8uAP0BK00qwEHx5tD4hTBSwyDujo5V5LbQAIMHA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片" style="zoom:67%;"><p>可以看出</p><blockquote><ul><li>后端基于 Spring Boot、Mysql、Redis、Mqtt 等技术开发。</li><li>前端基于国内比较火的 Vue 开发。</li><li>移动端基于 Android 进行开发</li></ul></blockquote><blockquote><p>另外，硬件端基于 ESP-IDF、Arduino、FreeRTOS 等技术开发。如果你对于物联网不太了解的话，我推荐你可以先看看《图解物联网》这本书。这是一本非常好的物联网科普书，读起来也比较轻松有趣。</p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/BcyAypujBVbzXLn1r2mJMMg4b6JGs1qJf1e79NKGNrtlMmEkjzkMTS8LdWJIOwyicEOrflHticm2RTlOSeBnzLag/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>如果你想要实际体验一下这个项目的话，可以看看官方的技术文档：<a href="https://gitee.com/kerwincui/wumei-smart/wikis/pages" target="_blank" rel="noreferrer">https://gitee.com/kerwincui/wumei-smart/wikis/pages</a> 。上面有关于这个项目如何部署、如何使用很详细的介绍。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/BcyAypujBVbzXLn1r2mJMMg4b6JGs1qJGQGQYGZHcxV8HNZcrmqLFIcibhUAh4jXunDXxuITuL9icibu2Ar7X6aiag/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>更多关于这个项目的详细介绍，小伙伴们可以参考：</p><ul><li>项目官网：<a href="http://wumei.live/" target="_blank" rel="noreferrer">http://wumei.live/</a></li><li>项目地址：<a href="https://gitee.com/kerwincui/wumei-smart" target="_blank" rel="noreferrer">https://gitee.com/kerwincui/wumei-smart</a></li></ul><h1 id="开源管理系统" tabindex="-1">开源管理系统 <a class="header-anchor" href="#开源管理系统" aria-label="Permalink to &quot;开源管理系统&quot;">​</a></h1><h2 id="scui-admin-中后台前端解决方案" tabindex="-1">SCUI Admin 中后台前端解决方案 <a class="header-anchor" href="#scui-admin-中后台前端解决方案" aria-label="Permalink to &quot;SCUI Admin 中后台前端解决方案&quot;">​</a></h2><p>SCUI 是一个中后台前端解决方案，基于 VUE3和 elementPlus 实现。使用最新的前端技术栈，提供各类实用的组件方便在业务开发时的调用，并且持续性的提供丰富的业务模板帮助你快速搭建企业级中后台前端任务。</p><blockquote><p>项目地址：<a href="https://gitee.com/lolicode/scui" target="_blank" rel="noreferrer">https://gitee.com/lolicode/scui</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZaGge9uuOvDSUd8IgKF3ibLzKvgUof2UIMVpj1icbpWLz8p97obPxialWg/640?wx_fmt=jpeg&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZyLibPsX0iaRtcPXibzzc5FpO8E8tOYwDYgkx3GPrhASqricuoI6T3aicSaQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="vue-netcore-前后端分离的快速发开框架" tabindex="-1">Vue + .NetCore 前后端分离的快速发开框架 <a class="header-anchor" href="#vue-netcore-前后端分离的快速发开框架" aria-label="Permalink to &quot;Vue + .NetCore 前后端分离的快速发开框架&quot;">​</a></h2><p>框架内置了大量的通用组件可直接使用,并内置了基于本框架定制开发的代码生成器，尽量避免重复性代码编写。支持前端、后台自定义业务代码扩展,后台提供了大量常用扩展与通用类；前端、后台提供了近300个扩展方法与属性,开发人员可在此功能上编写扩展自定义业务代码</p><blockquote><p>项目地址：<a href="https://gitee.com/x_discoverer/Vue.NetCore" target="_blank" rel="noreferrer">https://gitee.com/x_discoverer/Vue.NetCore</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZV5dHcic3kxiar8A43kLe1Y5GGYicz7ruOq3hnpPhteyAKUL0lxIJFJlibA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZHIVP2v9F31icA4kV7AOXUkBV5gaptLRicOBBSdSb4m63WPicMjEGhpNeQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="next-admin-适配移动端、pc的后台模板" tabindex="-1">next-admin 适配移动端、pc的后台模板 <a class="header-anchor" href="#next-admin-适配移动端、pc的后台模板" aria-label="Permalink to &quot;next-admin 适配移动端、pc的后台模板&quot;">​</a></h2><p>基于 vue3.x + CompositionAPI + typescript + vite + element plus + vue-router-next + next.vuex，适配手机、平板、pc 的后台开源免费模板，希望减少工作量，帮助大家实现快速开发。</p><blockquote><p>项目地址：<a href="https://gitee.com/lyt-top/vue-next-admin" target="_blank" rel="noreferrer">https://gitee.com/lyt-top/vue-next-admin</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZONTC3x9P7gCkyRDpNxqp8hKPz0t3KcHYJ8urupLoMextn8l8DTT1kA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZyawCpXtibU47H47cc8y45icbbWGHfEYwe20MdhqgkGqN2icG51RGOfdSg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="django-vue-admin-pro-快速开发平台" tabindex="-1">django-vue-admin-pro 快速开发平台 <a class="header-anchor" href="#django-vue-admin-pro-快速开发平台" aria-label="Permalink to &quot;django-vue-admin-pro 快速开发平台&quot;">​</a></h2><p>django-vue-admin-pro 是一套全部开源的快速开发平台，毫无保留给个人及企业免费使用。前端采用 D2Admin 、Vue。后端采用 Python 语言 Django 框架。权限认证使用 Jwt，支持多终端认证系统。支持加载动态权限菜单，多方式轻松实现权限控制。</p><blockquote><ul><li>项目地址：<a href="https://gitee.com/dvadmin/django-vue-admin-pro" target="_blank" rel="noreferrer">https://gitee.com/dvadmin/django-vue-admin-pro</a></li></ul></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZsI56HkCD0Hj6DQW9AstMOTaj9ozApt6DiaHgeBz95NEKMMNZZC5xQ2g/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="admin-net-通用管理平台" tabindex="-1">Admin.NET 通用管理平台 <a class="header-anchor" href="#admin-net-通用管理平台" aria-label="Permalink to &quot;Admin.NET 通用管理平台&quot;">​</a></h2><p>基于 Furion/.NET 6实现的通用管理平台。整合最新技术，模块插件式开发，前后端分离，开箱即用。集成EF Core、多租户、缓存、数据校验、鉴权、事件总线、动态 API、通讯、远程请求、任务调度、gRPC 等众多黑科技。代码简洁、易扩展，让开发更简单、更通用、更流行！</p><blockquote><p>项目地址：<a href="https://gitee.com/zuohuaijun/Admin.NET" target="_blank" rel="noreferrer">https://gitee.com/zuohuaijun/Admin.NET</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZEKibNeJlrNicOjokokxWgcGvN8EtdPz4iaBickgfALellWjL1HfFcNnqQw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZDgZxC91EArIiaNTdXMvicrBzqHKqW6237u3ibJOYvSLyEekGNn8niaA2gw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="ruoyi-若依权限管理系统" tabindex="-1">RuoYi 若依权限管理系统 <a class="header-anchor" href="#ruoyi-若依权限管理系统" aria-label="Permalink to &quot;RuoYi 若依权限管理系统&quot;">​</a></h2><p>基于 SpringBoot 的权限管理系统 易读易懂、界面简洁美观。核心技术采用Spring、MyBatis、Shiro 没有任何其它重度依赖，直接运行即可用。</p><blockquote><p>项目地址：<a href="https://gitee.com/y_project/RuoYi" target="_blank" rel="noreferrer">https://gitee.com/y_project/RuoYi</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZrCh7JUTIn0lWhZHQBV54taICt4c9ibHeeyJibCvpzTTo1YmfrR6sdt5w/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZVnQQfHEnfh8iaB8JicW7DNjBcnO8fPN3JibkzVz2ibYw9licFwYNDgc3ASQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="vue3-2-element-plus-后台管理框架" tabindex="-1">Vue3.2 + Element-Plus 后台管理框架 <a class="header-anchor" href="#vue3-2-element-plus-后台管理框架" aria-label="Permalink to &quot;Vue3.2 + Element-Plus 后台管理框架&quot;">​</a></h2><p>Geeker Admin，基于 Vue3.2、TypeScript、Vite3、Pinia、Element-Plus 开源的一套后台管理框架。</p><blockquote><p>项目地址：<a href="https://github.com/HalseySpicy/Geeker-Admin" target="_blank" rel="noreferrer">https://github.com/HalseySpicy/Geeker-Admin</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZwZOeNNibVs6XSibLceKd5zlq6BVnQWic9Q3EtBctibUuWCHhl6F38DPyYQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZXpCr9FoGgOySrXpkB1k3BZk1dpH1oMkrtA5IRNOhsu9eroG5GuUk2g/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="pig-rabc权限管理系统" tabindex="-1">Pig RABC权限管理系统 <a class="header-anchor" href="#pig-rabc权限管理系统" aria-label="Permalink to &quot;Pig RABC权限管理系统&quot;">​</a></h2><p>基于 Spring Boot 2.6、 Spring Cloud 2021 &amp; Alibaba、 OAuth2 的微服务RBAC 权限管理系统。基于数据驱动视图的理念封装 element-ui，即使没有 vue 的使用经验也能快速上手。</p><blockquote><p>项目地址：<a href="https://gitee.com/log4j/pig" target="_blank" rel="noreferrer">https://gitee.com/log4j/pig</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZl0V9LtNmdw5DYBgBAejhUn4c2FKtfaWklLDNB1EqznibHhPLu9OP7nA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZahCLtw7rZDRf2zeXEOC2k4wcLzXvKgPZmoIdoZB3GEian6VXepk6OBg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="zheng-分布式敏捷开发系统架构" tabindex="-1">zheng 分布式敏捷开发系统架构 <a class="header-anchor" href="#zheng-分布式敏捷开发系统架构" aria-label="Permalink to &quot;zheng 分布式敏捷开发系统架构&quot;">​</a></h2><p>基于 Spring+SpringMVC+Mybatis 分布式敏捷开发系统架构，提供整套公共微服务服务模块：集中权限管理（单点登录）、内容管理、支付中心、用户管理（支持第三方登录）、微信平台、存储系统、配置中心、日志分析、任务和通知等，支持服务治理、监控和追踪，努力为中小型企业打造全方位 J2EE 企业级开发解决方案。</p><blockquote><p>项目地址：<a href="https://gitee.com/shuzheng/zheng" target="_blank" rel="noreferrer">https://gitee.com/shuzheng/zheng</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZF1ibo4P0V364jYFNia9FyibyhPpiaz7NQz7pvpVdiauObbv0Wf1YGauZhoA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="guns-快速开发平台" tabindex="-1">Guns 快速开发平台 <a class="header-anchor" href="#guns-快速开发平台" aria-label="Permalink to &quot;Guns 快速开发平台&quot;">​</a></h2><p>Guns 基 于Spring Boot2，致力于做更简洁的后台管理系统。支持单体和微服务架构。</p><blockquote><p>项目地址：<a href="https://gitee.com/stylefeng/guns" target="_blank" rel="noreferrer">https://gitee.com/stylefeng/guns</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZmKtYL8C2InGMTKkicy6JrAghAaCWJ1lyGB6pGHRRFQIK5e9ugrKQopQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZMU263oyI87ce168F1vUicyn7fFrAHWT2g8ofouEIJicgKxia5ZiagDNJbw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="d2admin-企业中后台产品前端集成方案" tabindex="-1">D2Admin 企业中后台产品前端集成方案 <a class="header-anchor" href="#d2admin-企业中后台产品前端集成方案" aria-label="Permalink to &quot;D2Admin 企业中后台产品前端集成方案&quot;">​</a></h2><p>D2Admin 是一个完全 开源免费 的企业中后台产品前端集成方案，使用最新的前端技术栈，小于 60kb 的本地首屏 js 加载，已经做好大部分项目前期准备工作，并且带有大量示例代码，助力管理系统敏捷开发。</p><blockquote><p>项目地址：<a href="https://github.com/d2-projects/d2-admin" target="_blank" rel="noreferrer">https://github.com/d2-projects/d2-admin</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZEBD5ItcqJgDhwktw6U5uON6PLV63ibHLyogSFGyzPATeicWXvbQQdFicw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="jeespringcloud-权限管理系统" tabindex="-1">JeeSpringCloud 权限管理系统 <a class="header-anchor" href="#jeespringcloud-权限管理系统" aria-label="Permalink to &quot;JeeSpringCloud 权限管理系统&quot;">​</a></h2><p>基于 SpringBoot2.0的后台权限管理系统界面简洁美观敏捷开发系统架构。核心技术采用 Spring、MyBatis、Shiro 没有任何其它重度依赖。互联网云快速开发框架,微服务分布式代码生成的敏捷开发系统架构。项目代码简洁,注释丰富,上手容易,还同时集中分布式、微服务，同时包含许多基础模块和监控、服务模块。</p><blockquote><p>项目地址：<a href="https://gitee.com/JeeHuangBingGui/jeeSpringCloud" target="_blank" rel="noreferrer">https://gitee.com/JeeHuangBingGui/jeeSpringCloud</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZXMeKNwcBUiaSyWuXFs1pgPQ1Nn5MTKPT1ZexWbEWPeE4mXJCeXaicuXw/640?wx_fmt=jpeg&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZkDeZPQVoicS5dc6GEDh4Q4ROjE4mQQQe6HutDia2Y5w8MydmyddpAESQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="bootstrapadmin-后台管理框架" tabindex="-1">BootstrapAdmin 后台管理框架 <a class="header-anchor" href="#bootstrapadmin-后台管理框架" aria-label="Permalink to &quot;BootstrapAdmin 后台管理框架&quot;">​</a></h2><p>基于 RBAC 的 Net6 后台管理框架，权限管理，前后台分离，支持多站点单点登录，兼容所有主流浏览器，内置微信、支付宝、QQ等多种登录方式，内置多种样式，可切换至 Blazor 多 Tabs 模式，权限控制细化到网页内任意元素（按钮、表格、文本框等等）</p><blockquote><p>项目地址：<a href="https://gitee.com/LongbowEnterprise/BootstrapAdmin" target="_blank" rel="noreferrer">https://gitee.com/LongbowEnterprise/BootstrapAdmin</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZKcM1YaBhXk5ZibN8qwemoicRv2xkjsRb1LHMZF5E45HYGcxecKlHh92Q/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZLNeqpFvcPBNrZEMuewBIgSkrlQlBKwS4ibMdZxQVa9X4D3o1QjBiaxTA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="eladmin-后台管理系统" tabindex="-1">eladmin 后台管理系统 <a class="header-anchor" href="#eladmin-后台管理系统" aria-label="Permalink to &quot;eladmin 后台管理系统&quot;">​</a></h2><p>EL-ADMIN (opens new window)一个基于 Spring Boot 2.1.0 、 Spring Boot Jpa、 JWT、Spring Security、Redis、Vue、Element-UI 的前后端分离的后台管理系统。</p><blockquote><p>项目地址：<a href="https://gitee.com/elunez/eladmin" target="_blank" rel="noreferrer">https://gitee.com/elunez/eladmin</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZjAepiaFRpYhDTAHhBPpONrEeY7Wv8ia1w8xsnxXAibeV3A3GY6lRnklfQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZibHIHsxopeBtPFnrhx1kicBGtkV2Dzmvqy8Dtxu9up7oGIwTz1YwKia7g/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="fastadmin-基于-thinkphp-和-bootstrap" tabindex="-1">FastAdmin 基于 ThinkPHP 和 Bootstrap <a class="header-anchor" href="#fastadmin-基于-thinkphp-和-bootstrap" aria-label="Permalink to &quot;FastAdmin 基于 ThinkPHP 和 Bootstrap&quot;">​</a></h2><p>FastAdmin 是一款基于 ThinkPHP 和 Bootstrap 的极速后台开发框架，基于 Auth 验证的权限管理系统，一键生成 CRUD，自动生成控制器、模型、视图、JS、语言包、菜单、回收站。</p><blockquote><p>项目地址：<a href="https://gitee.com/karson/fastadmin" target="_blank" rel="noreferrer">https://gitee.com/karson/fastadmin</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZMtP18ZUhrWicPy3ffBQ0uzAB7D9VVxOcKkfufTU0v9kv2e5EmibdC6GQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZesHNZePmk1icqGjhtezbIsJAU70a0hW9iaeGmTQWNgOptibF93Q2HqPXw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="vben-admin-中大型项目后台解决方案" tabindex="-1">Vben-Admin 中大型项目后台解决方案 <a class="header-anchor" href="#vben-admin-中大型项目后台解决方案" aria-label="Permalink to &quot;Vben-Admin 中大型项目后台解决方案&quot;">​</a></h2><p>Vue-Vben-Admin 是一个基于 Vue3.0、Vite、 Ant-Design-Vue、TypeScript 的后台解决方案，目标是为开发中大型项目提供开箱即用的解决方案。包括二次封装组件、utils、hooks、动态菜单、权限校验、按钮级别权限控制等功能。项目会使用前端较新的技术栈，可以作为项目的启动模板，以帮助你快速搭建企业级中后台产品原型。</p><blockquote><p>项目地址：<a href="https://github.com/vbenjs/vue-vben-admin" target="_blank" rel="noreferrer">https://github.com/vbenjs/vue-vben-admin</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZpCnJ9SrQjleXRG1t0FtqXObzhxKjEnZ7V26CFdJXjicaTojTia7Dl7Xg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZ1vYvBuh8RO0GgKNEn9pUhibsqWSln6p9Q9VpMM0DGOh6m2iaNTW8Awicg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="smart-admin-通用型中后台解决方案" tabindex="-1">smart-admin 通用型中后台解决方案 <a class="header-anchor" href="#smart-admin-通用型中后台解决方案" aria-label="Permalink to &quot;smart-admin 通用型中后台解决方案&quot;">​</a></h2><p>SmartAdmin 由河南·洛阳 1024创新实验室团队研发的一套互联网企业级的通用型中后台解决方案！使用最前沿的前后台技术栈 SpringBoot 和 Vue，前后端分离，我们开源一套漂亮的代码和一套整洁的代码规范，让大家在这浮躁的代码世界里感受到一股把代码写好的清流！同时又让开发者节省大量的时间，减少加班，快乐工作，热爱生活。SmartAdmin 让你从认识到忘不了，绝对是你最想要的！</p><blockquote><p>项目地址：<a href="https://gitee.com/lab1024/smart-admin" target="_blank" rel="noreferrer">https://gitee.com/lab1024/smart-admin</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZWgqHqQNYnapprgEsXQ7DNpkE4czRBrb9aOKQ8sfLSg70Ficicfva9cuA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZIad9TCMqEyL74dMXuF98AibOF8AN2dicaoC8WSuopng26gKxmtQWiaia0g/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h2 id="erupt-低代码全栈类框架" tabindex="-1">erupt 低代码全栈类框架 <a class="header-anchor" href="#erupt-低代码全栈类框架" aria-label="Permalink to &quot;erupt 低代码全栈类框架&quot;">​</a></h2><p>Erupt 是一个低代码 全栈类 框架，它使用 Java 注解 动态生成页面以及增、删、改、查、权限控制等后台功能。零前端代码、零 CURD、自动建表，仅需 一个类文件 + 简洁的注解配置，快速开发企业级 Admin 管理后台。高扩展性，支持 CURD 自由扩展 @DataProxy 、自定义数据源、逻辑删除、LDAP、OSS。</p><blockquote><p>项目地址：<a href="https://gitee.com/erupt/erupt" target="_blank" rel="noreferrer">https://gitee.com/erupt/erupt</a></p></blockquote><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZ2wV9u4AngmKCwogPIeL3xfickeZsaaic81AReiciaKrF0nrt4b9WwcsFJQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/3znpAPOaOrhxaOibmVfQtyoKOduMgAoXZVbCicoY8WVo3f7sd7M5ibp5tlOw0XS3tw2sqYSoyBS95TuVd0NsZHTFw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h1 id="最强的后台管理系统" tabindex="-1">最强的后台管理系统 <a class="header-anchor" href="#最强的后台管理系统" aria-label="Permalink to &quot;最强的后台管理系统&quot;">​</a></h1><h2 id="ruoyi-vue-pro-ruoyi-vue-全新-pro-版本" tabindex="-1">ruoyi-vue-pro：RuoYi-Vue 全新 Pro 版本 <a class="header-anchor" href="#ruoyi-vue-pro-ruoyi-vue-全新-pro-版本" aria-label="Permalink to &quot;ruoyi-vue-pro：RuoYi-Vue 全新 Pro 版本&quot;">​</a></h2><p><strong>项目介绍</strong> ：</p><ul><li>RuoYi-Vue 全新 Pro 版本，优化重构所有功能。系统内置多种多种业务功能，可以用于快速你的业务系统。</li><li>后端基于 Spring Boot + MyBatis Plus + Druid + Flowable + Quartz，前端基于 Vue &amp; Element。</li><li>支持 RBAC 动态权限、数据权限、SaaS 多租户、Flowable 工作流、三方登录、支付、短信、商城等功能。</li></ul><p><strong>内置功能</strong> ：</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9Txw85YtbKNvl0ibKkgxeiahe5uq8IuhPEKuuygWVvVdPy3QOqxyXPhLfjGWPnoCRyDaAqCFoshA9uUQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">功能分层</p><p><strong>效果预览</strong> ：</p><p><img src="https://mmbiz.qpic.cn/mmbiz/iaIdQfEric9Txw85YtbKNvl0ibKkgxeiahe5GYiamW2FAgbicPCzMAx37hy26WL8wtcgGqU8olicAYgAlDyGwIJtgsc6Q/640?wx_fmt=other&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">首页</p><p><img src="https://mmbiz.qpic.cn/mmbiz/iaIdQfEric9Txw85YtbKNvl0ibKkgxeiahe5foMLJmVhW95QMKxkCricxPu107iboFGuN6XfVdTh7FrroB0fcX6SMFaw/640?wx_fmt=other&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">令牌管理</p><p><img src="https://mmbiz.qpic.cn/mmbiz/iaIdQfEric9Txw85YtbKNvl0ibKkgxeiahe5SiaibhtBlnP9OlOm5AsNE386jRpRAwHTgh0seL7tNiceNXCVhDOK72Xrg/640?wx_fmt=other&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">流程模型-设计</p><p><strong>相关地址</strong> ：</p><ul><li>项目地址：<strong><a href="https://gitee.com/zhijiantianya/ruoyi-vue-pro" target="_blank" rel="noreferrer">https://gitee.com/zhijiantianya/ruoyi-vue-pro</a></strong></li><li>官方文档：<strong><a href="https://doc.iocoder.cn/" target="_blank" rel="noreferrer">https://doc.iocoder.cn/</a></strong></li></ul><h2 id="ageiport-数据导入导出解决方案" tabindex="-1">AGEIPort：数据导入导出解决方案 <a class="header-anchor" href="#ageiport-数据导入导出解决方案" aria-label="Permalink to &quot;AGEIPort：数据导入导出解决方案&quot;">​</a></h2><p><strong>项目介绍</strong> ：</p><ul><li>AGEIPort 是阿里开源的一套解决数据导入导出常见痛点的解决方案，性能卓越、稳定可靠、功能丰富、易于扩展。像大数据量的 Excel 批量导入导出、实时任务进度计算和反馈等和数据导入导出相关的场景都可以使用 AGEIPort。</li><li>AGEIPort 来自于阿里系产品数据导入导出相关业务的技术沉淀和总结，经历了多次 618 和双 11 大促考验，稳定导入导出数据 300~400 亿条/月。</li><li>如果你的项目涉及到大量的数据导入导出需求或者对数据导入导出性能比较敏感的话，可以试试 AGEIPort，毕竟是阿里系沉淀得到的解决方案，性能以及功能还是很强大的。</li></ul><p><strong>系统架构</strong> ：</p><p><img src="https://mmbiz.qpic.cn/mmbiz_jpg/iaIdQfEric9Txw85YtbKNvl0ibKkgxeiahe53PxibBYSXcBZ9NqVg0tnNr3xibSGU0PBN5WjlhC4IXZRW5sLDRz7maAA/640?wx_fmt=jpeg&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">AGEIPort 系统架构</p><p><strong>相关地址</strong> ：</p><ul><li>项目地址：<strong><a href="https://github.com/alibaba/AGEIPort" target="_blank" rel="noreferrer">https://github.com/alibaba/AGEIPort</a></strong></li><li>文章介绍：<strong><a href="https://mp.weixin.qq.com/s/qGOW_So4BLPNDUGMsWr1Yg" target="_blank" rel="noreferrer">https://mp.weixin.qq.com/s/qGOW_So4BLPNDUGMsWr1Yg</a></strong></li></ul><h2 id="powerjob-分布式调度与计算" tabindex="-1">PowerJob：分布式调度与计算 <a class="header-anchor" href="#powerjob-分布式调度与计算" aria-label="Permalink to &quot;PowerJob：分布式调度与计算&quot;">​</a></h2><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9Txw85YtbKNvl0ibKkgxeiahe5oOClIkb4ia6aVymEDypV4uSdFVaa3ibmrl25ywEZne7Kpvel2KgMKHCg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><strong>项目介绍</strong> ：</p><ul><li>分布式调度与计算框架，能让您轻松完成作业的调度与繁杂任务的分布式计算。</li><li>适合有定时执行、延迟执行、全部机器一同执行、分布式处理等需求的业务场景。</li><li>使用简单，提供 Web 界面，开发者可以可视化地完成调度任务的管理（增、删、改、查）、任务运行状态监控和运行日志查看等功能。</li><li>支持多种定时策略以及执行模式，支持 DAG 工作流。</li></ul><p><strong>系统架构</strong> ：</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9Txw85YtbKNvl0ibKkgxeiahe5ggaXB02fLZFYvw9dzeqDmZKmib4bR9sSmRbhc6giabaAROz9xTricTazQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">PowerJob 系统架构</p><p><strong>同类产品对比</strong> ：</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9Txw85YtbKNvl0ibKkgxeiahe5MzTMsib5Vtnia3LicsYK5M0EEayQ4127pteIWELrFXO8WbazHpbJE5dRg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片">PowerJob 和同类产品的对比</p><p><strong>相关地址</strong> ：</p><ul><li>项目地址：<strong><a href="https://github.com/PowerJob/PowerJob" target="_blank" rel="noreferrer">https://github.com/PowerJob/PowerJob</a></strong></li><li>项目文档：<strong><a href="https://www.yuque.com/powerjob/guidence/intro" target="_blank" rel="noreferrer">https://www.yuque.com/powerjob/guidence/intro</a></strong></li></ul><p><strong>相关阅读</strong> ：</p><ul><li><a href="https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&amp;mid=2247511468&amp;idx=1&amp;sn=c6e99db2b7c6ba9ea7eee1751c364d5f&amp;chksm=cea1e267f9d66b71acaf94bcb3157f38ff42353b6a2bf50bd894b57b9bcf925dc6fdaa29aa83&amp;token=933632753&amp;lang=zh_CN&amp;scene=21#wechat_redirect" target="_blank" rel="noreferrer">再见 Spring Task，这个定时任务框架真香！</a></li><li><a href="https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&amp;mid=2247532339&amp;idx=1&amp;sn=97c77b226d02daeb097bb6febdd76df2&amp;scene=21#wechat_redirect" target="_blank" rel="noreferrer">PowerJob 快速入门指南</a></li></ul><p>这个框架的诞生也挺有意思的，PowerJob 的作者当时在阿里巴巴实习过，阿里巴巴那会使用的是内部自研的 SchedulerX（阿里云付费产品）。实习期满之后，PowerJob 的作者离开了阿里巴巴。想着说自研一个 SchedulerX，防止哪天 SchedulerX 满足不了需求，于是 PowerJob 就诞生了。</p><h2 id="mybatis-crypto-mybatis-字段加解密组件" tabindex="-1">mybatis-crypto：mybatis 字段加解密组件 <a class="header-anchor" href="#mybatis-crypto-mybatis-字段加解密组件" aria-label="Permalink to &quot;mybatis-crypto：mybatis 字段加解密组件&quot;">​</a></h2><ul><li>基于 mybatis 插件机制实现的字段加解密组件，通过一个注解即可对敏感数据进行加解密处理。</li><li>支持自定义 <code>Encryptor</code>、特殊字段单独指定 <code>Encryptor</code> 和 <code>key</code> ，满足大部分使用场景。</li><li>项目地址：<strong><a href="https://github.com/WhiteDG/mybatis-crypto" target="_blank" rel="noreferrer">https://github.com/WhiteDG/mybatis-crypto</a></strong></li></ul><div class="language-java"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">User</span><span style="color:#89DDFF;">.</span><span style="color:#A6ACCD;">java</span></span>
<span class="line"><span style="color:#89DDFF;">@</span><span style="color:#C792EA;">Data</span></span>
<span class="line"><span style="color:#C792EA;">public</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">class</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">User</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#C792EA;">private</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">Long</span><span style="color:#A6ACCD;"> id</span><span style="color:#89DDFF;">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#89DDFF;">@</span><span style="color:#C792EA;">EncryptedField</span><span style="color:#89DDFF;">(</span><span style="color:#FFCB6B;">encryptor</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> MyEncryptor</span><span style="color:#89DDFF;">.</span><span style="color:#A6ACCD;">class</span><span style="color:#89DDFF;">)</span></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#C792EA;">private</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">String</span><span style="color:#A6ACCD;"> name</span><span style="color:#89DDFF;">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#89DDFF;">@</span><span style="color:#C792EA;">EncryptedField</span><span style="color:#89DDFF;">(</span><span style="color:#FFCB6B;">encryptor</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> Base64Encryptor</span><span style="color:#89DDFF;">.</span><span style="color:#A6ACCD;">class</span><span style="color:#89DDFF;">)</span></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#C792EA;">private</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">String</span><span style="color:#A6ACCD;"> email</span><span style="color:#89DDFF;">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#89DDFF;">@</span><span style="color:#C792EA;">EncryptedField</span><span style="color:#89DDFF;">(</span><span style="color:#FFCB6B;">encryptor</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> StrongTextEncryptor</span><span style="color:#89DDFF;">.</span><span style="color:#A6ACCD;">class</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">key</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">SPECIFIED-KEY</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">)</span></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#C792EA;">private</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">String</span><span style="color:#A6ACCD;"> password</span><span style="color:#89DDFF;">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#89DDFF;">@</span><span style="color:#C792EA;">EncryptedField</span></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#C792EA;">private</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">String</span><span style="color:#A6ACCD;"> idCardNo</span><span style="color:#89DDFF;">;</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre></div><div class="language-java"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#C792EA;">public</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">class</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">MyEncryptor</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">implements</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">IEncryptor</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#C792EA;">public</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">static</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">String</span><span style="color:#A6ACCD;"> TAG </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&quot;</span><span style="color:#C3E88D;">-SUFFIX-BY-ENCRYPTOR</span><span style="color:#89DDFF;">&quot;</span><span style="color:#89DDFF;">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#89DDFF;">@</span><span style="color:#C792EA;">Override</span></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#C792EA;">public</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">String</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">encrypt</span><span style="color:#89DDFF;">(</span><span style="color:#C792EA;">Object</span><span style="color:#A6ACCD;"> </span><span style="color:#A6ACCD;font-style:italic;">val2bEncrypted</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">String</span><span style="color:#A6ACCD;"> </span><span style="color:#A6ACCD;font-style:italic;">key</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">throws</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">Exception</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#A6ACCD;">        </span><span style="color:#89DDFF;font-style:italic;">return</span><span style="color:#A6ACCD;"> val2bEncrypted</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">toString</span><span style="color:#89DDFF;">()</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">+</span><span style="color:#A6ACCD;"> TAG</span><span style="color:#89DDFF;">;</span></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#89DDFF;">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#89DDFF;">@</span><span style="color:#C792EA;">Override</span></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#C792EA;">public</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">String</span><span style="color:#A6ACCD;"> </span><span style="color:#82AAFF;">decrypt</span><span style="color:#89DDFF;">(</span><span style="color:#C792EA;">Object</span><span style="color:#A6ACCD;"> </span><span style="color:#A6ACCD;font-style:italic;">val2bDecrypted</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">String</span><span style="color:#A6ACCD;"> </span><span style="color:#A6ACCD;font-style:italic;">key</span><span style="color:#89DDFF;">)</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">throws</span><span style="color:#A6ACCD;"> </span><span style="color:#C792EA;">Exception</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">{</span></span>
<span class="line"><span style="color:#A6ACCD;">        </span><span style="color:#C792EA;">String</span><span style="color:#A6ACCD;"> str </span><span style="color:#89DDFF;">=</span><span style="color:#A6ACCD;"> val2bDecrypted</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">toString</span><span style="color:#89DDFF;">();</span></span>
<span class="line"><span style="color:#A6ACCD;">        </span><span style="color:#89DDFF;font-style:italic;">return</span><span style="color:#A6ACCD;"> str</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">substring</span><span style="color:#89DDFF;">(</span><span style="color:#F78C6C;">0</span><span style="color:#89DDFF;">,</span><span style="color:#A6ACCD;"> str</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">length</span><span style="color:#89DDFF;">()</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">-</span><span style="color:#A6ACCD;"> TAG</span><span style="color:#89DDFF;">.</span><span style="color:#82AAFF;">length</span><span style="color:#89DDFF;">());</span></span>
<span class="line"><span style="color:#A6ACCD;">    </span><span style="color:#89DDFF;">}</span></span>
<span class="line"><span style="color:#89DDFF;">}</span></span></code></pre></div><h2 id="novel-小说精品屋" tabindex="-1">novel：小说精品屋 <a class="header-anchor" href="#novel-小说精品屋" aria-label="Permalink to &quot;novel：小说精品屋&quot;">​</a></h2><p><strong>项目介绍</strong> ：</p><ul><li>novel 是一款开源原创文学 CMS 系统，附带保姆级教程，包含小说推荐、作品检索、小说排行榜、小说阅读、小说评论、会员中心、作家专区、充值订阅、新闻发布等功能。</li><li>后端基于 SpringBoot + MyBatis +Spring Security + Elasticsearch + RabbitMQ + XXL-JOB + Sentinel，前端基于 Vue 3 + Element Plus 。</li><li>除了单体版之外，这个项目还有一个基于 Spring Cloud 的微服务版本供你学习使用。</li></ul><p><strong>效果预览</strong> ：</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9Txw85YtbKNvl0ibKkgxeiahe52pfYtUD8Jzr4hF8o57icAoqkicLicNvibJ1zX3aiaMaFO6OYnJhtD6FY5cQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9Txw85YtbKNvl0ibKkgxeiahe5GRtnnb8xrMR3LbSnYksHUGlX3JJpEnyhajRMURU0F0zrEtdIN0kk3A/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"><img src="https://mmbiz.qpic.cn/mmbiz_png/iaIdQfEric9Txw85YtbKNvl0ibKkgxeiahe57PhXtK24HK6KOwCJRLbd9jmyg00p7JMRw0BmZAhfjZlBzazsdLcShQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><strong>相关地址</strong> ：</p><ul><li>项目地址：<strong><a href="https://github.com/201206030/novel" target="_blank" rel="noreferrer">https://github.com/201206030/novel</a></strong></li><li>项目文档：<strong><a href="https://docs.xxyopen.com/" target="_blank" rel="noreferrer">https://docs.xxyopen.com/</a></strong></li></ul><h1 id="soybean-admin-中后台模版⭐" tabindex="-1">Soybean Admin 中后台模版⭐ <a class="header-anchor" href="#soybean-admin-中后台模版⭐" aria-label="Permalink to &quot;Soybean Admin 中后台模版⭐&quot;">​</a></h1><blockquote><p>Soybean Admin 是一个基于 Vue3、Vite3、TypeScript、NaiveUI、Pinia 和 UnoCSS 的清新优雅的中后台模版，它使用了最新的前端技术栈，内置丰富的主题配置，有着极高的代码规范，基于 mock 实现的动态权限路由，开箱即用的中后台前端解决方案，也可用于学习参考。</p></blockquote><blockquote><ul><li><p>项目源码：<a href="https://github.com/honghuangdc/soybean-admin" target="_blank" rel="noreferrer">https://github.com/honghuangdc/soybean-admin</a></p></li><li><p>在线预览：<a href="https://soybean.pro/" target="_blank" rel="noreferrer">https://soybean.pro/</a></p></li><li><p>文档地址：<a href="https://docs.soybean.pro/" target="_blank" rel="noreferrer">https://docs.soybean.pro/</a></p></li></ul></blockquote><h2 id="特性" tabindex="-1">特性 <a class="header-anchor" href="#特性" aria-label="Permalink to &quot;特性&quot;">​</a></h2><ul><li><strong>最新技术栈：</strong> 使用 Vue3/vite2 等前端前沿技术开发, 使用高效率的 npm 包管理器 pnpm</li><li><strong>TypeScript:</strong> 应用程序级 JavaScript 的语言</li><li><strong>主题：</strong> 丰富可配置的主题、暗黑模式，基于原子 css 框架 - UnoCss 的动态主题颜色</li><li><strong>代码规范：</strong> 丰富的规范插件及极高的代码规范</li><li><strong>权限路由：</strong> 基于文件的路由系统、基于 mock 的动态路由能快速实现后端动态路由</li><li><strong>请求函数：</strong> 基于 axios 的完善的请求函数封装，提供 Promise 和 hooks 两种请求函数，加入请求结果数据转换的适配器适配器</li></ul><h2 id="特性细节" tabindex="-1">特性细节 <a class="header-anchor" href="#特性细节" aria-label="Permalink to &quot;特性细节&quot;">​</a></h2><h4 id="技术栈" tabindex="-1">技术栈： <a class="header-anchor" href="#技术栈" aria-label="Permalink to &quot;技术栈：&quot;">​</a></h4><blockquote><p>Vue3 + Vite3 + TypeScript + NaiveUI + Pinia + UnoCss + Axios + ECharts + AntV G2 + @vueuse + iconify</p></blockquote><h4 id="严格的代码规范" tabindex="-1">严格的代码规范： <a class="header-anchor" href="#严格的代码规范" aria-label="Permalink to &quot;严格的代码规范：&quot;">​</a></h4><ul><li>eslint + prettier + eslint-config-airbnb-base + eslint-plugin-vue + eslint-plugin-import + @typescript-eslint/eslint-plugin 等插件提供代码全面的格式规范，eslintrc 的 import/order 规则规范了导入依赖的顺序</li><li>husky + lint-staged + vuetsc + commitlint + commitizen 保证了提交的代码符合 eslint 规则和 TS 类型检测，提交的内容规范遵循了 angular 提交规范</li><li>应用设计模式优化代码：项目里面多次用到策略模式替换 if else</li><li>所有页面使用 script-setup 写法，并遵循特定顺序(用文档规范)</li><li>目录结构组织遵循特定规范，页面的写法严格遵循模块思想，使得每个页面的代码结构清晰明了</li></ul><h4 id="权限路由" tabindex="-1">权限路由： <a class="header-anchor" href="#权限路由" aria-label="Permalink to &quot;权限路由：&quot;">​</a></h4><ul><li>根据文件自动生成路由的类型和路由模块数据</li><li>动态的路由数据由 mock 生成，前端添加动态路由</li><li>指定了 mock 路由的类型，方便快速对接后端</li><li>菜单由动态路由数据生成，支持隐藏指定菜单，支持多级菜单，支持外链打开</li><li>在多页签中的缓存的页面会记录滚动位置</li><li>面包屑数据由当前路由和菜单数据生成</li></ul><h4 id="主题" tabindex="-1">主题： <a class="header-anchor" href="#主题" aria-label="Permalink to &quot;主题：&quot;">​</a></h4><ul><li>支持各种主题颜色、暗黑模式和各种布局</li><li>UnoCss 引入各种主题颜色，直接通过 class 即可应用对应的颜色</li><li>初始化加载适应主题颜色</li><li>支持项目 logo 自适应主题颜色</li></ul><h4 id="请求函数-基于-axios-封装" tabindex="-1">请求函数：基于 axios 封装 <a class="header-anchor" href="#请求函数-基于-axios-封装" aria-label="Permalink to &quot;请求函数：基于 axios 封装&quot;">​</a></h4><ul><li><strong>请求实例：</strong> 可创建多个不同的 baseUrl 的请求实例</li><li><strong>统一请求结果：</strong> 将错误信息统一处理成特定格式，和请求成功的数据再按特定格式一起返回</li></ul><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">/** 自定义的请求成功结果 */</span></span>
<span class="line"><span style="color:#A6ACCD;">interface SuccessResult&lt;T = any&gt; {</span></span>
<span class="line"><span style="color:#A6ACCD;">  /** 请求错误 */</span></span>
<span class="line"><span style="color:#A6ACCD;">  error: null;</span></span>
<span class="line"><span style="color:#A6ACCD;">  /** 请求数据 */</span></span>
<span class="line"><span style="color:#A6ACCD;">  data: T;</span></span>
<span class="line"><span style="color:#A6ACCD;">}</span></span>
<span class="line"><span style="color:#A6ACCD;">/** 请求错误 */</span></span>
<span class="line"><span style="color:#A6ACCD;">interface RequestError {</span></span>
<span class="line"><span style="color:#A6ACCD;">  /** 请求服务的错误类型 */</span></span>
<span class="line"><span style="color:#A6ACCD;">  type: RequestErrorType;</span></span>
<span class="line"><span style="color:#A6ACCD;">  /** 错误码 */</span></span>
<span class="line"><span style="color:#A6ACCD;">  code: string | number;</span></span>
<span class="line"><span style="color:#A6ACCD;">  /** 错误信息 */</span></span>
<span class="line"><span style="color:#A6ACCD;">  msg: string;</span></span>
<span class="line"><span style="color:#A6ACCD;">}</span></span>
<span class="line"><span style="color:#A6ACCD;">/** 自定义的请求失败结果 */</span></span>
<span class="line"><span style="color:#A6ACCD;">interface FailedResult {</span></span>
<span class="line"><span style="color:#A6ACCD;">  /** 请求错误 */</span></span>
<span class="line"><span style="color:#A6ACCD;">  error: RequestError;</span></span>
<span class="line"><span style="color:#A6ACCD;">  /** 请求数据 */</span></span>
<span class="line"><span style="color:#A6ACCD;">  data: null;</span></span>
<span class="line"><span style="color:#A6ACCD;">}</span></span>
<span class="line"><span style="color:#A6ACCD;">/** 自定义的请求结果 */</span></span>
<span class="line"><span style="color:#A6ACCD;">type RequestResult&lt;T = any&gt; = SuccessResult&lt;T&gt; | FailedResult;</span></span></code></pre></div><ul><li><strong>错误提示：</strong> 智能提示错误，避免同一种错误在同一时间段显示，通过指定错误码不展示响应错</li><li><strong>token 刷新：</strong> 无感刷新 token</li><li><strong>请求参数转换：</strong> 根据不同的 Content-Type 转换数据，利用 qs 序列化数据，支持单文件和多文件上</li></ul><blockquote><p>封装的请求函数支持 Promise 和 hooks 两种, hooks 的请求函数包含 loading 状态</p></blockquote><h4 id="自定义组件" tabindex="-1">自定义组件 <a class="header-anchor" href="#自定义组件" aria-label="Permalink to &quot;自定义组件&quot;">​</a></h4><h6 id="布局组件soybean-admin-layout" tabindex="-1">布局组件soybean-admin-layout： <a class="header-anchor" href="#布局组件soybean-admin-layout" aria-label="Permalink to &quot;布局组件soybean-admin-layout：&quot;">​</a></h6><ul><li>分为 header、tab、sider、content、footer 五个部分，除了 content，其余都可以控制显示隐藏，且可以自定义过度动画</li><li>支持 vertical 和 horizontal 两种模式，结合局部的现实隐藏，为该项目提供了 4 种布局模式</li><li>高性能组件，相比用 UI 组件构建的布局，该组件不用考虑很多因素，专注于当前的几种布局模式</li></ul><h6 id="多页签组件soybean-admin-tab-chrometab-和-buttontab" tabindex="-1">多页签组件soybean-admin-tab：ChromeTab 和 ButtonTab <a class="header-anchor" href="#多页签组件soybean-admin-tab-chrometab-和-buttontab" aria-label="Permalink to &quot;多页签组件soybean-admin-tab：ChromeTab 和 ButtonTab&quot;">​</a></h6><ul><li>支持主题颜色及暗黑模式</li><li>ChromeTab 类似于浏览器的标签，样式清新</li><li>结合 BetterScroll，实现多页签组件的左右鼠标滑动(移动端左右触摸滑动)，激活状态的 Tab 自动居中</li></ul><h6 id="loadingemptywrapper" tabindex="-1">LoadingEmptyWrapper <a class="header-anchor" href="#loadingemptywrapper" aria-label="Permalink to &quot;LoadingEmptyWrapper&quot;">​</a></h6><ul><li>支持现实加载状态、空状态和网络状态的组件</li><li>支持主题颜色及暗黑模式</li><li>图片文字大小通过属性配置</li></ul><h2 id="项目示例图" tabindex="-1">项目示例图 <a class="header-anchor" href="#项目示例图" aria-label="Permalink to &quot;项目示例图&quot;">​</a></h2><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbucB43Fc4std3IdnOib7ZJfibdrticRSJBt8zWGiagRxiaMz6gcYHfb89yZFdlEVMqG9H1JqZgLZsNp6rgw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbucB43Fc4std3IdnOib7ZJfibdN3tEfLibNYMXcQw76M2VlMDOnAbUofNmYZx6WUsc5BHIANg6iaqKRjhQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbucB43Fc4std3IdnOib7ZJfibdnMtgC8dPibn8icR1kgO4PcLUM6IVJS0nSicMYOIF8HeLpiayRFWTkic6kaA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbucB43Fc4std3IdnOib7ZJfibdY1Tqxxic5u3z7JPpVIELUJEmu6pbONGye6HfIaic0aWfUgnAFyjejqjQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbucB43Fc4std3IdnOib7ZJfibdsARxVbQ12K8A9kr2VVJvNIwxg1kFHbJKT7SBKex7bzmw6oYvn21RibQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbucB43Fc4std3IdnOib7ZJfibdM6fmEj8pIE2uialOGWCIXVzxHFaR4tOyc6WBEOjVUPicdI8MM8W6zbSw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbucB43Fc4std3IdnOib7ZJfibd3wrdAhliayFeU9gibffYhQqQficO4MLgcPicxzFK0KZ21AuHIKs5lIibTmQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbucB43Fc4std3IdnOib7ZJfibdsaWX7jrrDjVdWOLWSUOgicB7I6cmY1hyCEwOFoPWftAvgHlDeib1OtiaA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbucB43Fc4std3IdnOib7ZJfibdTJn6huXEuCdic94hB22eULThneDPt5KFzUMLXsf7aHyian0ibhD30x6icQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbucB43Fc4std3IdnOib7ZJfibdibKSic29ozn1dn1MsFP3Fy8iaLVPMLSvKnz4ibeTR3QcicbYXQs8B0zkAew/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbucB43Fc4std3IdnOib7ZJfibd0iaYs4nh7A9CxUvribziajTCK3FGUc45D4ic9jicWCSibJJiaZxW4IKXibJd0Q/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><h1 id="网页版人脸识别登录" tabindex="-1">网页版人脸识别登录 <a class="header-anchor" href="#网页版人脸识别登录" aria-label="Permalink to &quot;网页版人脸识别登录&quot;">​</a></h1><blockquote><p>FACE-UI 基于前后端分离Web端项目，主要实现了网页版的人脸登录，通过调取前端摄像头拍照，传入后台进行跟数据库人脸库的相似度比对。</p></blockquote><blockquote><p>技术点：Springboot，Mysql，JWT，VUE 2.X 等等技术实现，主要功能点：人脸列表CRUD，日志列表CRUD，基于自建人脸库通过base64编码方式存储人脸图片，通过调用腾讯云人脸对比API场景实现</p></blockquote><h2 id="项目地址" tabindex="-1">项目地址 <a class="header-anchor" href="#项目地址" aria-label="Permalink to &quot;项目地址&quot;">​</a></h2><p>FACE-UI 项目地址</p><blockquote><ul><li>gitee后端项目：<a href="https://gitee.com/susantyp/face-easy" target="_blank" rel="noreferrer">https://gitee.com/susantyp/face-easy</a></li><li>gitee前端项目：<a href="https://gitee.com/susantyp/face-ui" target="_blank" rel="noreferrer">https://gitee.com/susantyp/face-ui</a></li></ul></blockquote><h2 id="后端项目" tabindex="-1">后端项目 <a class="header-anchor" href="#后端项目" aria-label="Permalink to &quot;后端项目&quot;">​</a></h2><p><strong>1，拉取项目后，导入相关依赖jar包</strong></p><p>项目结构</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbudeL3gFlSd5L4Y0bDleqktNv8TO5CTQjpqxdxwKl7qE44spbaFXPSOKBUwehQbz8dzwzicH5NvcCTQ/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><strong>2，执行sql文件夹下面的mysql脚本</strong></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbudeL3gFlSd5L4Y0bDleqktNloERPWvz0UTZQKFJwvpMQEIDZibKAK5fllzeeKQT5ESnckoAGea5qQg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><strong>3，执行完成后，配置腾讯云</strong></p><blockquote><p>参考：<a href="https://blog.csdn.net/Susan003/article/details/125914027" target="_blank" rel="noreferrer">https://blog.csdn.net/Susan003/article/details/125914027</a></p></blockquote><p><strong>4，获取secretId和secretKey，并开通人脸服务之后，将secretId和secretKey配置到yml文件中</strong></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbudeL3gFlSd5L4Y0bDleqktNiaHpmhkJSKhicnNBq9jqwOvk0HAPU9YfSTz0oXlWvsYCefGEnwZeTEwg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><strong>5，运行 FaceEasyApplication</strong></p><h2 id="vue前端项目" tabindex="-1">vue前端项目 <a class="header-anchor" href="#vue前端项目" aria-label="Permalink to &quot;vue前端项目&quot;">​</a></h2><p><strong>1，拉取项目后，安装依赖</strong></p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">npm install </span></span>
<span class="line"><span style="color:#A6ACCD;">#如果有淘宝镜像</span></span>
<span class="line"><span style="color:#A6ACCD;">cnpm install</span></span></code></pre></div><p>运行</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">npm run serve</span></span></code></pre></div><p><strong>2，效果图，登录页面</strong></p><blockquote><p>注意：刚刚初始化的时候，表里面是没有人脸的</p></blockquote><p>所以登录界面第一次拍照为录入人脸，后续为验证人脸登录</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbudeL3gFlSd5L4Y0bDleqktNqEghPvRszicQ5gHOZUYzFh1UBgarkfgmLISbNPnfvaGkgyEk5bUd8Dw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbudeL3gFlSd5L4Y0bDleqktNAWojqsfyWZicp5LZpopr7ibZ99SetDYWQhjoWpbyohmK6EAXwjzWrXzg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>摄像头被我挡住了哦😂</p><p><strong>3，首页效果图</strong></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbudeL3gFlSd5L4Y0bDleqktNicB52ia5CJEwEKMCzz1SPRavdz6cvPnszibOE2UOJkcliablfqjFlF52Kg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbudeL3gFlSd5L4Y0bDleqktN1Vlic5H3ibp9onjtUMuf3oCsbzmoEd8qM56icY1a6bibib9FXCt5xF9drVw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p><strong>4，列表效果图</strong></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbudeL3gFlSd5L4Y0bDleqktNOHq3Cr90n8MhztQMSvib0nNqP1b1dgonGhLr3ib4xj65Ga7m3axicC8wg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>4.1，添加人脸效果图</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbudeL3gFlSd5L4Y0bDleqktNbeaiaovz22WOBkVibKLz6UjsfkMIyCBYo5UXOWp5wxHzYpibyV2I7mO1g/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>4.2，修改人脸数据效果图</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbudeL3gFlSd5L4Y0bDleqktNId6MzLSVZAia5B74cmSibaicicps9Cqh1hXqRgxmLTVkY5kVeH62om0yLA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>其余的可以自己慢慢探索</p><p><strong>5，日志列表效果图</strong></p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbudeL3gFlSd5L4Y0bDleqktNsKh8UlCCY0QlCC7peDT49KPFFDS9l8d81c8C0pSTuK80E0UVf0M8kw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>日志列表 主要记录近期：登录的情况以及异常</p><h1 id="亲戚计算器" tabindex="-1">亲戚计算器 <a class="header-anchor" href="#亲戚计算器" aria-label="Permalink to &quot;亲戚计算器&quot;">​</a></h1><blockquote><p>《亲戚计算器》大概是我迄今为止写过最复杂的算法了，它可能看起来它好像逻辑简单，仅 1 个方法调用而已，却耗费了我大量的时间！</p></blockquote><blockquote><p>从一开始灵光乍现，想到实现它的初步思路，到如今开源已 7 年多了。这期间，我一直在不断更新才让它日趋完善，它的工作不仅是对数据的整理，还有我对程序逻辑的梳理和设计思路的推敲。</p></blockquote><blockquote><p>如果你也对传统文化稍微有点兴趣，不妨耐心的看下去……也许你会发现：原来我们日常习以为常的一个称呼，需要考虑那么多细节。</p></blockquote><h2 id="称谓系统的庞大" tabindex="-1">称谓系统的庞大 <a class="header-anchor" href="#称谓系统的庞大" aria-label="Permalink to &quot;称谓系统的庞大&quot;">​</a></h2><p>中国的亲戚称呼系统复杂在于，它对每种亲戚关系都有特定的称呼，同时对于同种关系不同地方、对于不同性别的人都可能有不同的称呼。</p><ol><li>对外国人而言，父母的兄弟姐妹不外乎：uncle、aunt；而对于我们来说，父母的兄弟姐妹有：伯父、叔叔、姑姑、舅舅、姨妈；</li><li>不同地方对同个亲戚的称呼都是不一样的，以爸爸为例，别称包含有：爸爸、父亲、老爸、阿爸、老窦、爹地、老汉、老爷子等等；</li><li>不同关系链可能具有相同的称呼；比如“舅公”一词，可以是父母亲的舅舅，也可以是老公的舅舅，而这两种关系辈分却不同。究其原因我猜测是，传统上由姻亲产生的亲戚关系，为表达谦卑会自降一辈，随子女称呼配偶的长辈。</li><li>一个称呼中可能是多种关系的合称。比如：“父母”、“子女”、“公婆”，他们不是指代一个人物关系，而是几个关系的合称。</li></ol><p>在设计这套算法的时候，我希望它能尽量包含各种称呼、各种关系链，因为我之所以做这个项目就是像让它真正集合多种需求，否则如果它不够全面那终究是个代码演示而已。</p><h2 id="关系网络的表达" tabindex="-1">关系网络的表达 <a class="header-anchor" href="#关系网络的表达" aria-label="Permalink to &quot;关系网络的表达&quot;">​</a></h2><blockquote><p>亲戚的关系网络是以血缘和婚姻为纽带联系在一起的，每个节点都是一个人，每个人都有诸如：父、母、兄、弟、姐、妹、子、女、夫、妻这样的基础关系。关系网络中的节点数量随着层级的加深而指数增长！如果是5层关系，大概就有9x9x9x9x9 = 59049种关系了（当然，这其中有小部分是重复的）。如果想要把几万个关系，数十万个称呼全部尽收其中显然是不可能的，没人有那个精力去维护。</p></blockquote><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202302271500894.png" alt="image-20230227150024752" style="zoom:80%;"><blockquote><p>如何将亲戚关系网络中每个节点之间的关系用数据结构表现出来是一个难点。它需要保证数据量尽量全、占用体积小、易检索、可扩展等特点，这样才能保证算法检索关系时的完整性和高效性。</p></blockquote><h2 id="网络的寻址问题" tabindex="-1">网络的寻址问题 <a class="header-anchor" href="#网络的寻址问题" aria-label="Permalink to &quot;网络的寻址问题&quot;">​</a></h2><p>既然是计算，那一定不是简单通过父、母、子、女等这些基础关系找对应称呼了。否则这就是简单的字典查询而已，谈不上算法。</p><p>如果问的是：“舅妈的儿子的奶奶的外孙”又该如何呢？首先，需要在网络中找到单一称呼，如“舅妈”，而下一步找她的“儿子”，而非你自己的“儿子”。这就要求有类似于指针的功能，关系链每往前走一步，指针就指引着关系的节点，最终需找到答案。</p><p>而就像前面说到的一样，某些称谓可能对应多条关系，同时有些关系并不是唯一的。比方说你爸爸的儿子就是你吗？有没有可能是弟弟或者哥哥？而这些是不是同时取决于你的性别呢？</p><blockquote><p>因为如果你是女的，那么你爸爸的儿子必然不是你呀！</p></blockquote><p>这就对算法提出了一个要求，它必须准确的包含多种可能性。</p><h2 id="年龄和性别的推测" tabindex="-1">年龄和性别的推测 <a class="header-anchor" href="#年龄和性别的推测" aria-label="Permalink to &quot;年龄和性别的推测&quot;">​</a></h2><p>随着关系链的复杂，最终得到的答案也有多种。那有没有一种可能，在对关系链的描述中是否存在一些词，可以通过逻辑判断知道对方的性别或年纪大小，进而排除一些不可呢？</p><p>例如“爱人的婆婆的儿子”，单从“爱人”二字我们并不能推测自己的性别，而后的“婆婆”确是只有女性才有的亲戚，“爱人的婆婆”就足以推断自己是男的，那么“爱人的婆婆的儿子”必然包含自己。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202302271501381.png" alt="image-20230227150107306" style="zoom:67%;"><p>相反，“爱人的婆婆的女儿”一定不是自己，只能是自己的姊妹。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202302271501076.png" alt="image-20230227150122989" style="zoom:67%;"><p>再比如：自己哥哥的表哥也是你的表哥，你弟弟的表哥还是你表哥吗？因为你无法判断你弟弟和他的表哥谁大，自然无法判断对方是你的表哥还是表弟。既然都有可能存在，就需要保留可能性进一步计算。这就涉及到了在关系链的计算中不仅仅需要考虑隐藏的性别线索，还有年龄线索。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202302271501686.png" alt="image-20230227150141598" style="zoom:67%;"><h2 id="身份角度的切换" tabindex="-1">身份角度的切换 <a class="header-anchor" href="#身份角度的切换" aria-label="Permalink to &quot;身份角度的切换&quot;">​</a></h2><p>单从亲戚和自己的关系链条中开始算亲戚的称呼，仅仅是单向的推算，只需要一个个关系往下算就好。如果想知道对方称呼为我什么，这就需要站在对方的角度，重新逆向的调理出我和他之间的关系了。比如我的“外孙”应该叫我什么？</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202302271501883.png" alt="image-20230227150157789" style="zoom:67%;"><p>另一方面，如果把我置身于第三者，想知道我的两个亲戚他们之间如何称呼，就必须要同时站在两个亲戚的角度，看待他们彼此之间的关系了。比如：我的“舅妈”该叫我的“外婆”什么呢？</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202302271502115.png" alt="image-20230227150220045" style="zoom:67%;"><h2 id="年龄排序的问题" tabindex="-1">年龄排序的问题 <a class="header-anchor" href="#年龄排序的问题" aria-label="Permalink to &quot;年龄排序的问题&quot;">​</a></h2><p>前面说到的都是对不同关系链中的可能性推敲，那如果相同的关系如何判断年龄呢？如果你有3个舅舅呢？虽然不管哪个舅舅，他们对于你的关系都一样，他们的老婆你都得叫声“舅妈”。但他们毕竟有年龄区别，自然就有长幼的排序了。有了排序，就又引发了对他们之间关系的思考。</p><p>还是举例说明下：“舅舅”和“舅妈”是什么关系？相信大部分第一反应就是夫妻关系呗！其实不尽然，毕竟有些人不会只有一个舅舅吧？那“大舅妈”和“二舅”就不是夫妻关系了，他们是叔嫂关系呀。“二舅”得管“大舅妈”叫“嫂子”，“大舅妈”得管“二舅”叫“小叔子”。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202302271502509.png" alt="image-20230227150240439" style="zoom:67%;"><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202302271502222.png" alt="image-20230227150256151" style="zoom:67%;"><p>再进一步说，“二舅的儿子”得叫“大舅妈”为“伯母”，“大舅的儿子”得叫“二舅”为“二叔”。这些由父辈的排序问题影响自己称谓的不同，而是我这套算法需要考虑的内容。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202302271503358.png" alt="image-20230227150338289" style="zoom:67%;"><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202302271503575.png" alt="image-20230227150322504" style="zoom:67%;"><p>怎么样？是不是没有想象中的那么简单？</p><blockquote><p>项目线上访问地址：<a href="https://passer-by.com/relationship/" target="_blank" rel="noreferrer">https://passer-by.com/relationship/</a></p></blockquote><blockquote><p>项目源码：<a href="https://github.com/mumuy/relationship" target="_blank" rel="noreferrer">https://github.com/mumuy/relationship</a></p></blockquote><h2 id="算法实现原理介绍" tabindex="-1">算法实现原理介绍 <a class="header-anchor" href="#算法实现原理介绍" aria-label="Permalink to &quot;算法实现原理介绍&quot;">​</a></h2><h3 id="常见问题" tabindex="-1">常见问题 <a class="header-anchor" href="#常见问题" aria-label="Permalink to &quot;常见问题&quot;">​</a></h3><p>市面上同类型的算法基本以 “称谓-直接关系-称谓” 的方式实现，如：</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">&quot;爸爸&quot;: {</span></span>
<span class="line"><span style="color:#A6ACCD;">    &quot;爸爸&quot;: &quot;爷爷&quot;,</span></span>
<span class="line"><span style="color:#A6ACCD;">    &quot;妈妈&quot;: &quot;奶奶&quot;,</span></span>
<span class="line"><span style="color:#A6ACCD;">    &quot;哥哥&quot;: &quot;伯父&quot;,</span></span>
<span class="line"><span style="color:#A6ACCD;">    &quot;弟弟&quot;: &quot;叔叔&quot;,</span></span>
<span class="line"><span style="color:#A6ACCD;">    &quot;姐姐&quot;: &quot;姑妈&quot;,</span></span>
<span class="line"><span style="color:#A6ACCD;">    &quot;妹妹&quot;: &quot;姑妈&quot;,</span></span>
<span class="line"><span style="color:#A6ACCD;">    &quot;丈夫&quot;: &quot;未知&quot;,</span></span>
<span class="line"><span style="color:#A6ACCD;">    &quot;妻子&quot;: &quot;妈妈&quot;,</span></span>
<span class="line"><span style="color:#A6ACCD;">    &quot;儿子&quot;: {&quot;older&quot;: &quot;哥哥&quot;, &#39;middle&#39;: &quot;我&quot;, &quot;younger&quot;: &quot;弟弟&quot;},</span></span>
<span class="line"><span style="color:#A6ACCD;">    &quot;女儿&quot;: {&quot;older&quot;: &quot;姐姐&quot;, &#39;middle&#39;: &quot;我&quot;, &quot;younger&quot;: &quot;妹妹&quot;}</span></span>
<span class="line"><span style="color:#A6ACCD;">}</span></span></code></pre></div><p>这样的结构主要有以下问题：</p><ol><li>无法跨代直接查询，如：如何知道“舅妈的婆婆”是谁？</li><li>无法逆向查询称谓，如：“表哥的妈妈”的妈妈是“舅妈”、“姨妈”还是“姑妈”？</li><li>数据结构过于臃肿, 如：某个节点下可能会出现多个“未知”</li><li>无法兼容多种称呼，如：各地称呼不尽相同，“爸爸”也可以叫“父亲”、“爹地”</li><li>无法进行关系拓扑，如：“舅妈”和我什么关系？</li></ol><h3 id="本算法的原理" tabindex="-1">本算法的原理 <a class="header-anchor" href="#本算法的原理" aria-label="Permalink to &quot;本算法的原理&quot;">​</a></h3><p>采用 “关系链-称谓集合” 哈希对的方式建立数据库，映射亲戚网络中的每个节点和自己的关系</p><p>数据结构</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">&#39;h&#39;:[&#39;老公&#39;,&#39;丈夫&#39;,&#39;先生&#39;,&#39;官人&#39;,&#39;男人&#39;,&#39;汉子&#39;,&#39;夫&#39;,&#39;夫君&#39;,&#39;相公&#39;,&#39;夫婿&#39;,&#39;爱人&#39;,&#39;老伴&#39;],</span></span>
<span class="line"><span style="color:#A6ACCD;">&#39;h,f&#39;:[&#39;公公&#39;,&#39;翁亲&#39;,&#39;老公公&#39;],</span></span></code></pre></div><p>每个称谓都可以找到相应的关系链，每个关系链同时有对应的称谓集合，这里需要引入自己“发明”的特殊语法标记</p><p>语法说明</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">【关系】f:父,m:母,h:夫,w:妻,s:子,d:女,xb:兄弟,ob:兄,lb:弟,xs:姐妹,os:姐,ls:妹</span></span>
<span class="line"><span style="color:#A6ACCD;">【修饰符】 1:男性,0:女性,&amp;o:年长,&amp;l:年幼,#:隔断,[a|b]:并列</span></span>
<span class="line"><span style="color:#A6ACCD;">例如：</span></span>
<span class="line"><span style="color:#A6ACCD;"></span></span>
<span class="line"><span style="color:#A6ACCD;">&quot;f&quot;对应着爸爸，那么：&quot;f,m&quot;对应着奶奶,&quot;f,f&quot;对应着爷爷；</span></span></code></pre></div><p>这样在查询关系的时候，只需要对关系链进行计算就好了，而不是对称谓进行字典查找</p><h3 id="算法思路" tabindex="-1">算法思路 <a class="header-anchor" href="#算法思路" aria-label="Permalink to &quot;算法思路&quot;">​</a></h3><p>当用户输入“舅妈的婆婆”，可以分解出两个对象“舅妈”和“婆婆”（前者的婆婆）</p><p>从“关系链-称谓集合”映射关系可知，这两个对象的关系链分别是：&quot;m,xb,w&quot;和&quot;h,m&quot;,合并后的关系即：&quot;m,xb,w,h,m&quot;</p><p>此时关系链会出现冗余，需要进一步处理：</p><p>&quot;w,h&quot;表示“老婆的老公”，即自己，可直接将关系链简化成：&quot;m,xb,m&quot;</p><p>同理，&quot;xb,m&quot;表示“兄弟的妈妈”，即自己的妈妈，可将关系链再次简化为：&quot;m,m&quot;</p><p>当无法进一步简化时，就得到了“最简关系链”，将其带入亲戚关系数据库查询，便可知&quot;m,m&quot;即为自己的“外婆”</p><p>这样就将复杂的关系链转换成直接关系了，除此之外还可根据“关系链-称谓集合”反向通过称呼找到关系；</p><h3 id="实现细节" tabindex="-1">实现细节 <a class="header-anchor" href="#实现细节" aria-label="Permalink to &quot;实现细节&quot;">​</a></h3><p>如何实现关系链的简化？</p><p>关系链为字符串，用正则表达式即可按情形匹配，同时做到“替换”的操作。由于所有非直接的关系，都是存在关系链表达的冗余。虽然冗余可能多层且复杂，只需要考虑两层关系中的去冗余，反复处理即可。</p><p>某些多层关系可能未必对应一种关系，如何解决关系的不唯一？</p><p>“爸爸的儿子”不一定是自己，也可能是自己的兄弟。在语法中引入了“隔断”和“并列”语法，可以借助正则表达式将此类不唯一的关系拆分为多组，每次再单独带入递归求最简解即可。</p><p>每个节点离自己远一层关系，节点数据便翻倍，如何解决数据量过大的问题？</p><p>中国的亲戚关系存在一定规律，旁系分支大体由 分支节点 及其 子代关系 ，我们只需记录 分支节点 和 子代关系 即可。如：“舅表哥”和“堂哥”两者在和自己的关系链上存在一定相似，没必要记录两者所有关系。只需知道“舅表哥”是“舅舅”的后代，而“堂哥”是“叔伯”的后代，那么“舅表哥”和“堂哥”的所有后代及姻亲数据可以只存3部分。即：</p><p>舅表哥关系数据 = 舅舅（分支节点） + 哥哥关系数据（子代关系）；</p><p>堂哥关系数据 = 叔伯（分支节点） + 哥哥关系数据（子代关系）；</p><p>这样的关系有很多，如：“舅表”、“姑表”、“从堂”、“姑表叔表”等等，对关系数据进行拆分复用，即可以达到压缩数据量。同时在脚本运行中对 分支节点 和 子代关系 进行拼接即可组合出数据库。</p><p>你还知道哪些可以计算出亲戚关系的好方法，欢迎在评论区留言~</p><h1 id="贼有意思的免费项目" tabindex="-1">贼有意思的免费项目 <a class="header-anchor" href="#贼有意思的免费项目" aria-label="Permalink to &quot;贼有意思的免费项目&quot;">​</a></h1><p>大家好，我是鱼皮。今天看到了几个有意思的项目，其中包含了各种编程语言，觉得很不错，分享给大家。</p><h2 id="《金庸群侠传》c-复刻版" tabindex="-1">《金庸群侠传》C++ 复刻版 <a class="header-anchor" href="#《金庸群侠传》c-复刻版" aria-label="Permalink to &quot;《金庸群侠传》C++ 复刻版&quot;">​</a></h2><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161122356.png" alt="image-20230416112259301" style="zoom:80%;"><p><strong>Star 数</strong>：1.9K｜<strong>编程语言</strong>：C++</p><p>这是一款基于 SDL2 开发的 2D 游戏，作为《金庸群侠传》C++ 复刻版，它的资源大部分来自《金庸群侠传》DOS 版本，复刻版除了经典的回合制战斗系统，还在加入了受《黑帝斯》启发的即时战斗系统。或许大佬们的重温经典，就是用自己擅长的编程语言把游戏重新实现一遍吧。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161123847.png" alt="image-20230416112310565" style="zoom:80%;"><blockquote><p>地址：<a href="https://github.com/scarsty/kys-cpp" target="_blank" rel="noreferrer">https://github.com/scarsty/kys-cpp</a></p></blockquote><h2 id="异步python-聊天机器人框架" tabindex="-1">异步Python 聊天机器人框架 <a class="header-anchor" href="#异步python-聊天机器人框架" aria-label="Permalink to &quot;异步Python 聊天机器人框架&quot;">​</a></h2><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161123084.png" alt="image-20230416112324036" style="zoom:80%;"><p><strong>Star 数</strong>：3.2K｜<strong>编程语言</strong>：Python</p><p>它是基于 Python 的异步特性构建的聊天机器人框架，可以轻松处理大量的消息。还提供了命令行脚手架，仅用几条命令就可以完成项目搭建。支持多种 IM 平台，有效地帮助开发人员快速构建聊天机器人、消息通知等项目。该项目代码质量高、社区活跃，它上得了生产环境，下能搞定一次性脚本。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_gif/xBgIbW1vdNNRK93loibTVe5ibubBhlzdiaokpxHLGDWPniaicYfJ2LjUdapaHmbCSxTZHQ5Fk3c7PJC9gDia06icPoPEw/640?wx_fmt=gif&amp;wxfrom=5&amp;wx_lazy=1" alt="图片"></p><blockquote><p>地址：<a href="https://github.com/nonebot/nonebot2" target="_blank" rel="noreferrer">https://github.com/nonebot/nonebot2</a></p></blockquote><h2 id="jvm-沙箱容器" tabindex="-1">JVM 沙箱容器 <a class="header-anchor" href="#jvm-沙箱容器" aria-label="Permalink to &quot;JVM 沙箱容器&quot;">​</a></h2><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161123881.png" alt="image-20230416112349828" style="zoom:80%;"><p><strong>Star 数</strong>：5.5K｜<strong>编程语言</strong>：Java</p><blockquote><p>这是一种 JVM 的非侵入式运行期 AOP 解决方案。简单地说就是如果线上 Java 服务出现故障，需要加一条日志定位问题，通过该项目就可以在不重启服务的情况下，完成增加日志的操作。它还支持线上故障模拟、请求录制和结果回放等功能。</p></blockquote><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161124264.png" alt="image-20230416112405205" style="zoom:67%;"><blockquote><p>地址：<a href="https://github.com/alibaba/jvm-sandbox" target="_blank" rel="noreferrer">https://github.com/alibaba/jvm-sandbox</a></p></blockquote><h2 id="称手的-json-可视化工具" tabindex="-1">称手的 JSON 可视化工具 <a class="header-anchor" href="#称手的-json-可视化工具" aria-label="Permalink to &quot;称手的 JSON 可视化工具&quot;">​</a></h2><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161124918.png" alt="image-20230416112416869" style="zoom:80%;"><p><strong>Star 数</strong>：20.6K｜<strong>编程语言</strong>：TypeScript</p><blockquote><p>一款改变你查看 JSON 数据习惯的工具，它不是简单地格式化 JSON 数据，而是将其数据转化成节点，通过类似脑图的形式展示。支持放大/缩小、展开/收缩、搜索节点、导出图片等操作，你还可以通过部署服务，将它变成免费的在线服务。</p></blockquote><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161124293.png" alt="image-20230416112431157" style="zoom:80%;"><blockquote><p>地址：<a href="https://github.com/AykutSarac/jsoncrack.com" target="_blank" rel="noreferrer">https://github.com/AykutSarac/jsoncrack.com</a></p></blockquote><h2 id="极简的订阅工具" tabindex="-1">极简的订阅工具 <a class="header-anchor" href="#极简的订阅工具" aria-label="Permalink to &quot;极简的订阅工具&quot;">​</a></h2><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161124684.png" alt="image-20230416112450629" style="zoom:80%;"><p><strong>Star 数</strong>：4.4K｜<strong>编程语言</strong>：Go</p><p>一个极简主义的 feed 阅读器，它的“简”是由内而外，内部代码部分不使用 Web 框架和 ORM 仅采用 Go+PostgreSQL+JS 实现，界面朴实无华、功能精简实用，支持快速自建、源管理、自动获取内容、快捷键、用户系统等，这一切不多不少刚刚好。Go 初学者可以通过阅读不依赖任何框架、“纯粹”的 Go 代码，看清 Web 开发的原理。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161125147.png" alt="image-20230416112510077" style="zoom:80%;"><blockquote><p>地址：<a href="https://github.com/miniflux/v2" target="_blank" rel="noreferrer">https://github.com/miniflux/v2</a></p></blockquote><h2 id="强大的媒体库管理工具" tabindex="-1">强大的媒体库管理工具 <a class="header-anchor" href="#强大的媒体库管理工具" aria-label="Permalink to &quot;强大的媒体库管理工具&quot;">​</a></h2><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161125814.png" alt="image-20230416112521764" style="zoom:80%;"><p><strong>Star 数</strong>：19.2K｜<strong>编程语言</strong>：C#</p><p>一款完全免费、支持中文、安装简单、跨平台、功能齐全的媒体库管理系统。它能把原本躺在文件夹里的视频文件，变成包含封面、描述、评分、演员表等信息的“影碟”，让视频整整齐齐、赏心悦目，还支持视频续播、订阅更新、多端可看，让你可以远离广告优雅地追剧。要说缺点的话，感觉就是得花时间折腾一番才能感受到它的魅力。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161125246.png" alt="image-20230416112532045" style="zoom:80%;"><blockquote><p>地址：<a href="https://github.com/jellyfin/jellyfin" target="_blank" rel="noreferrer">https://github.com/jellyfin/jellyfin</a></p></blockquote><h2 id="好玩的-gb-游戏制作工具" tabindex="-1">好玩的 GB 游戏制作工具 <a class="header-anchor" href="#好玩的-gb-游戏制作工具" aria-label="Permalink to &quot;好玩的 GB 游戏制作工具&quot;">​</a></h2><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161125615.png" alt="image-20230416112541461" style="zoom:67%;"><p><strong>Star 数</strong>：6.7K｜<strong>编程语言</strong>：C</p><p>这是一款可视化开发游戏的工具，可用于快速构建复古冒险游戏。通过该项目可以实现仅仅拖拽的方式，就能制作出复古风格的 Game Boy 游戏，不会编程也可以开发游戏。还支持导出 ROM 或发布成在线游戏，适用于 macOS、Linux 和 Windows 操作系统。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161125831.png" alt="image-20230416112551708" style="zoom:80%;"><blockquote><p>地址：<a href="https://github.com/chrismaltby/gb-studio" target="_blank" rel="noreferrer">https://github.com/chrismaltby/gb-studio</a></p></blockquote><h2 id="markdown-电子书构建工具" tabindex="-1">Markdown 电子书构建工具 <a class="header-anchor" href="#markdown-电子书构建工具" aria-label="Permalink to &quot;Markdown 电子书构建工具&quot;">​</a></h2><p><strong>Star 数</strong>：11.6K｜<strong>编程语言</strong>：Rust</p><p>该项目是 Rust 官方开源的制作 Markdown 电子书工具，功能上类似 Gitbook。它可以将 Markdown 文件制作成在线书籍，支持代码高亮、可集成搜索、多主题等功能，简单易用非常适合创建教程、API 文档、开源书籍等。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161126674.png" alt="image-20230416112602605" style="zoom:80%;"><blockquote><p>地址：<a href="https://github.com/rust-lang/mdBook" target="_blank" rel="noreferrer">https://github.com/rust-lang/mdBook</a></p></blockquote><h2 id="按钮样式集合" tabindex="-1">按钮样式集合 <a class="header-anchor" href="#按钮样式集合" aria-label="Permalink to &quot;按钮样式集合&quot;">​</a></h2><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161121781.png" alt="image-20230416112128589" style="zoom:67%;"><p><strong>Star 数</strong>：2.6K｜<strong>编程语言</strong>：CSS</p><p>该项目提供了 100 种不同样式按钮的 CSS 源码，不仅如此还支持在线查看效果以及调试。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161121869.png" alt="image-20230416112149766" style="zoom:67%;"><blockquote><p>地址：<a href="https://github.com/ui-buttons/core" target="_blank" rel="noreferrer">https://github.com/ui-buttons/core</a></p></blockquote><h2 id="大学计算机没有的一课" tabindex="-1">大学计算机没有的一课 <a class="header-anchor" href="#大学计算机没有的一课" aria-label="Permalink to &quot;大学计算机没有的一课&quot;">​</a></h2><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161120343.png" alt="image-20230416112057086" style="zoom:67%;"><p><strong>Star 数</strong>：3.3K｜<strong>编程语言</strong>：Other</p><p>大学里的计算机课程往往只专注于讲授数据结构、操作系统这些知识，对于编程开发中常用的工具则留给学生自行学习。在 MIT 这个课程中，你可以了解和掌握命令行(shell)、文本编辑器(Vim)、版本控制系统(Git)等强大的工具，越早接触越能更加熟练地使用它们，有助于未来的职业生涯。</p><img src="https://edu-8673.oss-cn-beijing.aliyuncs.com/img2023.3.30/202304161121874.png" alt="image-20230416112111749" style="zoom:80%;"><blockquote><p>地址：<a href="https://github.com/missing-semester/missing-semester" target="_blank" rel="noreferrer">https://github.com/missing-semester/missing-semester</a></p><p>中文：<a href="https://missing-semester-cn.github.io/" target="_blank" rel="noreferrer">https://missing-semester-cn.github.io/</a></p></blockquote><h1 id="_10-个-yyds-的前端开源项目" tabindex="-1">10 个 yyds 的前端开源项目！ <a class="header-anchor" href="#_10-个-yyds-的前端开源项目" aria-label="Permalink to &quot;10 个 yyds 的前端开源项目！&quot;">​</a></h1><p>随着前端 Node.js 的不断发展，越来越多的优秀开源项目涌现出来，本文将推荐 10 个 yyds 的 Node.js 开源项目，通过学习这些优秀的 Node.js 开源项目，可以更好地掌握该技术，并在实际开发中获得更好的体验和效果！</p><h2 id="网易云音乐-api" tabindex="-1">网易云音乐 API <a class="header-anchor" href="#网易云音乐-api" aria-label="Permalink to &quot;网易云音乐 API&quot;">​</a></h2><p>一个基于 Node.js 的网易云音乐 API 服务。通过该项目，开发者可以方便地对网易云音乐进行各种操作，例如搜索歌曲、获取歌曲信息和评论、获取用户信息和播放列表等等。该项目提供了完整的文档供开发者参考，提供了超过250个接口。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/EO58xpw5UMPiauFE857MBzZAfyjK2tLIAVKYAfcnAhnGP7648CsjicJiatB09v9nLCWUicYeJYKibF0k35uSOtibjAQA/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>**Github：**<a href="https://github.com/Binaryify/NeteaseCloudMusicApi" target="_blank" rel="noreferrer">https://github.com/Binaryify/NeteaseCloudMusicApi</a></p><h2 id="饿了么-api" tabindex="-1">饿了么 API <a class="header-anchor" href="#饿了么-api" aria-label="Permalink to &quot;饿了么 API&quot;">​</a></h2><p>一个基于 Node.js + MongoDB + Express + Mongoose + Vue + Element UI 的前后端分离的 Web 应用项目，是一个仿照饿了么的外卖点餐系统。整个项目分为两部分：前台项目接口、后台管理接口，共60多个。涉及登陆、注册、添加商品、商品展示、筛选排序、购物车、下单、用户中心等，构成一个完整的流程。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/EO58xpw5UMPiauFE857MBzZAfyjK2tLIAWsle6LMNvnbzsr9cbSrJqNnfKXNN249uMxJYb6C3Gzonx7MtjAdtcw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>**Github：**<a href="https://github.com/bailicangdu/node-elm" target="_blank" rel="noreferrer">https://github.com/bailicangdu/node-elm</a></p><h2 id="qq音乐-api" tabindex="-1">QQ音乐 API <a class="header-anchor" href="#qq音乐-api" aria-label="Permalink to &quot;QQ音乐 API&quot;">​</a></h2><p>基于 Express + Axios 的 QQ音乐接口 nodejs 版，开发者可以方便地对 QQ 音乐进行各种操作，例如搜索歌曲、获取歌曲信息和评论、获取用户信息和播放列表等。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/EO58xpw5UMPiauFE857MBzZAfyjK2tLIAo4N57RCLsbcgdL14WVTCHVicZufM7xl5LTQMTheUH8fYjLgOSiao87icw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>**Github：**<a href="https://github.com/jsososo/QQMusicApi" target="_blank" rel="noreferrer">https://github.com/jsososo/QQMusicApi</a></p><h2 id="spotify-api" tabindex="-1">Spotify API <a class="header-anchor" href="#spotify-api" aria-label="Permalink to &quot;Spotify API&quot;">​</a></h2><p>一个可以运行在 Node.JS 和浏览器上的 Spotify Web API 通用封装库/客户端，使用了 browserify/webpack/rollup 进行打包。该项目提供了音乐数据、音乐简介、搜索、播放列表操作、音乐库、个性化、浏览、播放器、跟随、身份验证等功能 API。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/EO58xpw5UMPiauFE857MBzZAfyjK2tLIAPeBOzvuQuJSY3DFia7RFiacoZwmE4veCqLUhZ6IrJFicerj9NZE4giaUhg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>**Github：**<a href="https://github.com/thelinmichael/spotify-web-api-node" target="_blank" rel="noreferrer">https://github.com/thelinmichael/spotify-web-api-node</a></p><h2 id="chatgpt-api" tabindex="-1">ChatGPT API <a class="header-anchor" href="#chatgpt-api" aria-label="Permalink to &quot;ChatGPT API&quot;">​</a></h2><p>一个基于 OpenAI 的 ChatGPT 生成式对话模型的 Web API。该项目使用 TypeScript 和 Express.js 构建。通过该项目，开发者可以快速地搭建自己的聊天机器人，以及实现其他基于 ChatGPT 的自然语言处理应用。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/EO58xpw5UMPiauFE857MBzZAfyjK2tLIA1m3GSxeRKgGicib4moh08Hwic3ibGFmqPT8bHPtP1icVX7TdNl1K3thMicXg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>**Github：**<a href="https://github.com/transitive-bullshit/chatgpt-api" target="_blank" rel="noreferrer">https://github.com/transitive-bullshit/chatgpt-api</a></p><h2 id="spacex-rest-api" tabindex="-1">SpaceX REST API <a class="header-anchor" href="#spacex-rest-api" aria-label="Permalink to &quot;SpaceX REST API&quot;">​</a></h2><p>一个开源的 SpaceX 公司的 RESTful API，该项目提供了关于 SpaceX 发射、船只、火箭、任务等各种数据的接口。该项目的目的是为开发者提供 SpaceX 公司的数据，方便开发者进行相关应用的开发。同时，该项目还提供了文档和使用示例，方便开发者快速上手使用。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/EO58xpw5UMPiauFE857MBzZAfyjK2tLIA4P4dLYgGRnHicmWqLDK95PLVHe5OgpJXZgkvdibNx9375sL4DicmN9ickw/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>**Github：**<a href="https://github.com/r-spacex/SpaceX-API" target="_blank" rel="noreferrer">https://github.com/r-spacex/SpaceX-API</a></p><h2 id="node-js-最佳实践" tabindex="-1">Node.js 最佳实践 <a class="header-anchor" href="#node-js-最佳实践" aria-label="Permalink to &quot;Node.js 最佳实践&quot;">​</a></h2><p>Node.js 最佳实践指南，旨在帮助开发者编写更加健壮、安全和易于维护的 Node.js 应用程序。它提供了一系列的最佳实践、原则和代码示例，涵盖了从工程结构、代码组织、错误处理和日志记录等方面的内容。</p><p>该项目通过将最佳实践分类为 8 个模块，为开发者提供了一个全面的指南，帮助编写高质量的 Node.js 代码。这些模块包括：</p><ul><li>项目结构实践</li><li>异常处理实践</li><li>编码规范实践</li><li>测试和总体质量实践</li><li>进入生产实践</li><li>安全实践</li><li>性能实践</li><li>Docker实践</li></ul><p><img src="https://mmbiz.qpic.cn/mmbiz_png/EO58xpw5UMPiauFE857MBzZAfyjK2tLIAAqTLYraz9hKwWic8bg8GoPryBdqrXYPZ4Lmu8iaYiaNcRjxFibicAJ1Xxsg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>**Github：**<a href="https://github.com/goldbergyoni/nodebestpractices" target="_blank" rel="noreferrer">https://github.com/goldbergyoni/nodebestpractices</a></p><h2 id="node-js-调试指南" tabindex="-1">Node.js 调试指南 <a class="header-anchor" href="#node-js-调试指南" aria-label="Permalink to &quot;Node.js 调试指南&quot;">​</a></h2><p>一个面向 Node.js 调试的开源项目，旨在帮助开发者更好地理解和利用 Node.js 的调试工具。该项目提供了一组示例代码和指南，覆盖了 Node.js 内置的调试器、Chrome DevTools 和 VSCode 等常见的调试工具。</p><p>此外，该项目中的示例代码非常实用，包含了许多调试场景下的代码示例，例如如何在调试过程中打断点、如何使用条件断点、如何在调试期间修改变量值、如何跟踪异步代码等。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/EO58xpw5UMPiauFE857MBzZAfyjK2tLIAgeiagiaWMm9rpu90jIXiaicDBxev2thYz7QymbwGvU4gq0G8dnibtZRK9ng/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>**Github：**<a href="https://github.com/nswbmw/node-in-debugging" target="_blank" rel="noreferrer">https://github.com/nswbmw/node-in-debugging</a></p><h2 id="nodejs-roadmap" tabindex="-1">Nodejs-Roadmap <a class="header-anchor" href="#nodejs-roadmap" aria-label="Permalink to &quot;Nodejs-Roadmap&quot;">​</a></h2><p>一个社区驱动的学习资源，旨在帮助开发者系统学习成为现代化的 Node.js 开发者。通过该项目，开发者可以获得一份完整的学习路线图，学习从基础到进阶的全部内容。该路线图覆盖了从 Node.js 基础知识、模块和包管理、异步编程和事件循环、Web 开发、网络协议和安全、性能和可伸缩性等方面的内容。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/EO58xpw5UMPiauFE857MBzZAfyjK2tLIAKR4iaRPelSbIcIqicDxyD9ZuXL6lrSnjg4k23IC2D1AKq5iaZCYLYxBJg/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>**Github：**<a href="https://github.com/kamranahmedse/developer-roadmap" target="_blank" rel="noreferrer">https://github.com/kamranahmedse/developer-roadmap</a></p><h2 id="awesome-node-js" tabindex="-1">Awesome Node.js <a class="header-anchor" href="#awesome-node-js" aria-label="Permalink to &quot;Awesome Node.js&quot;">​</a></h2><p>一个开源的收录 Node.js 生态系统各种资源的项目，其中包括了 Node.js 框架、库、工具、文档和文章等各个方面，是一个非常受欢迎和权威的 Node.js 资源收集项目。</p><p><img src="https://mmbiz.qpic.cn/mmbiz_png/EO58xpw5UMPiauFE857MBzZAfyjK2tLIAYibYXSl9M9HVmYHNR3Tf1jN8yQjTLnbMWZf9YvAARuSTujhhjibag05A/640?wx_fmt=png&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="图片"></p><p>**Github：**<a href="https://github.com/sindresorhus/awesome-nodejs" target="_blank" rel="noreferrer">https://github.com/sindresorhus/awesome-nodejs</a></p></div></div></main><footer class="VPDocFooter" data-v-6b87e69f data-v-37656e44><!--[--><!--]--><!----><nav class="prev-next" data-v-37656e44><div class="pager" data-v-37656e44><a class="pager-link prev" href="/notebook/%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/%E6%94%AF%E4%BB%98.html" data-v-37656e44><span class="desc" data-v-37656e44>Previous page</span><span class="title" data-v-37656e44>支付</span></a></div><div class="pager" data-v-37656e44><a class="pager-link next" href="/notebook/team.html" data-v-37656e44><span class="desc" data-v-37656e44>Next page</span><span class="title" data-v-37656e44>团队成员</span></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
    <script>window.__VP_HASH_MAP__=JSON.parse("{\"2、数据库_mysql_mysql面试_基础.md\":\"40da680a\",\"1、学前端_5、小程序_小程序项目.md\":\"60a1629b\",\"1、学前端_4、node_知识篇.md\":\"a7fb500e\",\"1、学前端_2、js_ts_es6 进阶.md\":\"6d07ba10\",\"1、学前端_3、vue_vue3_vue3进阶.md\":\"7ac622b4\",\"5、运维_jenkins.md\":\"929081f8\",\"1、学前端_2、js_ts_typescript.md\":\"875a4aa4\",\"2、数据库_mysql_mysql核心_设计.md\":\"7faf46d1\",\"2、数据库_mysql_mysql核心_基础.md\":\"d8e97f3e\",\"1、学前端_1、html_css_html基础.md\":\"7584d076\",\"1、学前端_5、专题篇_问题篇.md\":\"e893aaa2\",\"2、数据库_mysql_mysql面试_进阶.md\":\"f934806d\",\"3、springboot_运维_原理.md\":\"f4a39db6\",\"2、数据库_influxdb.md\":\"6e1711e1\",\"3、springboot_新特性.md\":\"cdf3e307\",\"mybatis_mybatisplus_jpa.md\":\"8e41681b\",\"1、学前端_5、小程序_小程序优化.md\":\"a2185198\",\"2、数据库_redis_redis基础.md\":\"856df0e0\",\"linux_实用脚本.md\":\"f2299dd5\",\"4、微服务_必备_分布式基础.md\":\"d49863d5\",\"2、数据库_redis_redis优化.md\":\"e66ae32f\",\"4、微服务_springsecurity_进阶篇.md\":\"235a8e9e\",\"5、运维_chatgpt.md\":\"10db3823\",\"2、数据库_mysql_分库分表.md\":\"e1c8a095\",\"start.md\":\"9bc1ff8d\",\"5、运维_github.md\":\"2ec6c735\",\"java学前端_css.md\":\"f11b47f0\",\"1、学前端_5、专题篇_知识篇.md\":\"a463ed8d\",\"linux_软件部署.md\":\"d6722925\",\"2、数据库_neo4j.md\":\"97ad22ac\",\"team.md\":\"ce467a6a\",\"nginx_实战篇.md\":\"7785486e\",\"index.md\":\"8c3ec167\",\"计算机基础_计算机网络_网络基础.md\":\"7a54a85d\",\"1、学前端_4、node_进阶篇.md\":\"60f6db69\",\"java_java集合.md\":\"a049b313\",\"1、学前端_3、vue_vue3_vue3高级.md\":\"614d1516\",\"1、学前端_5、小程序_微信小程序.md\":\"9a4be771\",\"5、运维_netty.md\":\"12ca0278\",\"2、数据库_mysql_mysql核心_运维.md\":\"83f97c16\",\"idea_vs code.md\":\"afdcb593\",\"java学前端_vue3_组件.md\":\"1086884e\",\"idea_chrome.md\":\"4a32afbc\",\"云原生_k8s.md\":\"db58e65a\",\"2、数据库_mysql_mysql核心_进阶.md\":\"61d16dff\",\"ssm_springbatch.md\":\"f799ab4a\",\"三高_分布式.md\":\"db1b8a1b\",\"2、数据库_elasticsearch_1、es基础.md\":\"04d17448\",\"linux_linux基础.md\":\"4b0bf394\",\"idea_idea插件.md\":\"fa86e45a\",\"可视化 _ 监控_可视化大屏.md\":\"004553bd\",\"2、数据库_mongodb_整合.md\":\"3c47d7f4\",\"4、微服务_springsecurity_基础篇.md\":\"534a3401\",\"4、微服务_进阶.md\":\"69095c58\",\"计算机基础_计算机基础_操作系统.md\":\"0f75d113\",\"可视化 _ 监控_zabbix.md\":\"71f2270e\",\"nginx_基础篇.md\":\"c7d8bb50\",\"1、学前端_4、node_项目实战.md\":\"bc5065b8\",\"2、数据库_redis_redis原理.md\":\"5cedf685\",\"可视化 _ 监控_监控基础.md\":\"ac56ce4d\",\"三高_高并发.md\":\"ea9ffc99\",\"2、数据库_redis_redis高级.md\":\"1d5872f6\",\"1、学前端_4、node_基础篇.md\":\"581cc13a\",\"2、数据库_mongodb_基础.md\":\"fb7a0a29\",\"idea_idea基础.md\":\"6f2f9638\",\"4、微服务_必备_sentinel.md\":\"2edfbf6c\",\"2、数据库_elasticsearch_3、es高级.md\":\"ef146606\",\"1、学前端_3、vue_vue3_vue3新语法.md\":\"8afd5409\",\"消息中间件_canal.md\":\"3949163c\",\"ssm_maven.md\":\"2c5e12ed\",\"4、微服务_springsecurity_高级篇.md\":\"882d3ff3\",\"linux_linux进阶.md\":\"188ef7b4\",\"计算机基础_设计模式_uml.md\":\"634ba256\",\"计算机基础_算法_leetcode.md\":\"77162fb9\",\"项目实战_小兔鲜_进阶篇1.md\":\"17c52c81\",\"1、学前端_2、js_ts_es6 基础.md\":\"fda3f18b\",\"项目实战_小兔鲜_进阶篇2.md\":\"a0f23006\",\"软件测试_测试基础.md\":\"8c1060cd\",\"2、数据库_redis_本地缓存.md\":\"00617fe6\",\"nginx_面试篇.md\":\"e3fb373a\",\"mybatis_mybatisplus_mybatis.md\":\"9239e0ad\",\"linux_shell.md\":\"ae53d83b\",\"2、数据库_mysql_mysql核心_优化.md\":\"36230425\",\"项目实战_项目推荐.md\":\"f9d97630\",\"mybatis_mybatisplus_mybatisplus.md\":\"0030fd35\",\"项目实战_百度地图_进阶篇.md\":\"c8b93267\",\"三高_高可用.md\":\"323840c5\",\"java_java新特性.md\":\"22abf56d\",\"软件测试_压力测试.md\":\"9ab44440\",\"java学前端_html_js.md\":\"e0fcd240\",\"2、数据库_redis_redis实战.md\":\"d6daeeab\",\"nginx_进阶篇.md\":\"e6b63195\",\"三高_秒杀.md\":\"3878bb64\",\"5、运维_git.md\":\"0264925c\",\"java_java进阶.md\":\"e79cb5b4\",\"并发 _ 多线程_基础篇.md\":\"7adbfac5\",\"项目实战_百度地图_基础篇.md\":\"8afa5954\",\"java学前端_react.md\":\"3ec827dd\",\"1、学前端_1、html_css_css基础.md\":\"01b56712\",\"项目实战_小兔鲜_基础篇.md\":\"646f5df5\",\"1、学前端_2、js_ts_js 基础.md\":\"cb13e36f\",\"可视化 _ 监控_监控进阶.md\":\"0cdbc292\",\"计算机基础_设计模式_基础篇.md\":\"51617287\",\"计算机基础_数据结构_基础篇.md\":\"b2bfd8d4\",\"项目实战_苍穹外卖_进阶篇.md\":\"48415e41\",\"ssm_spring.md\":\"ab514659\",\"消息中间件_rabbitmq.md\":\"45b1eb28\",\"1、学前端_1、html_css_网页进阶.md\":\"db998248\",\"消息中间件_kafka.md\":\"b747dabf\",\"云原生_docker.md\":\"983c7ba7\",\"4、微服务_必备_分布式锁.md\":\"5af1cf8d\",\"消息中间件_rocketmq.md\":\"d441da85\",\"项目实战_黑马头条_基础篇.md\":\"b05af3a6\",\"ssm_springmvc.md\":\"81b9714f\",\"项目实战_支付.md\":\"1d7407dd\",\"项目实战_黑马头条_进阶篇2.md\":\"bff0015b\",\"项目实战_黑马头条_进阶篇.md\":\"19f18388\",\"java学前端_vue2_组件.md\":\"58c6b1df\",\"3、springboot_基础篇.md\":\"529c66f4\",\"3、springboot_应用篇.md\":\"8b92aa61\",\"项目实战_黑马头条_高级篇.md\":\"227c08c1\",\"1、学前端_5、小程序_uniapp.md\":\"71a282b4\",\"项目实战_云尚办公_基础篇.md\":\"1fe188ba\",\"并发 _ 多线程_并发完善.md\":\"26619c46\",\"1、学前端_2、js_ts_js 进阶.md\":\"657dfb8f\",\"java_java高级.md\":\"23782d1a\",\"java_java基础.md\":\"86d67c77\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"VitePress\",\"description\":\"A VitePress site\",\"base\":\"/notebook/\",\"head\":[],\"appearance\":true,\"themeConfig\":{\"algolia\":{\"appId\":\"DW7O63I9IR\",\"apiKey\":\"f8ed758cdb288a8b06542bc35923c1a1\",\"indexName\":\"notebook\"},\"sidebar\":[{\"text\":\"Java\",\"collapsed\":true,\"items\":[{\"text\":\"Java基础\",\"link\":\"/Java/Java基础\"},{\"text\":\"Java新特性\",\"link\":\"/Java/Java新特性\"},{\"text\":\"Java进阶\",\"link\":\"/Java/Java进阶\"},{\"text\":\"Java集合\",\"link\":\"/Java/Java集合\"},{\"text\":\"Java高级\",\"link\":\"/Java/Java高级\"}]},{\"text\":\"Linux\",\"collapsed\":true,\"items\":[{\"text\":\"Linux基础\",\"link\":\"/Linux/Linux基础\"},{\"text\":\"Linux新特性\",\"link\":\"/Linux/Linux进阶\"},{\"text\":\"Shell脚本\",\"link\":\"/Linux/Shell\"},{\"text\":\"实用脚本\",\"link\":\"/Linux/实用脚本\"},{\"text\":\"软件部署\",\"link\":\"/Linux/软件部署\"}]},{\"text\":\"Nginx\",\"collapsed\":true,\"items\":[{\"text\":\"基础篇\",\"link\":\"/Nginx/基础篇\"},{\"text\":\"进阶篇\",\"link\":\"/Nginx/进阶篇\"},{\"text\":\"实战篇\",\"link\":\"/Nginx/实战篇\"},{\"text\":\"面试篇\",\"link\":\"/Nginx/面试篇\"}]},{\"text\":\"SSM\",\"collapsed\":true,\"items\":[{\"text\":\"Maven\",\"link\":\"/SSM/Maven\"},{\"text\":\"Spring\",\"link\":\"/SSM/Spring\"},{\"text\":\"SpringMVC\",\"link\":\"/SSM/SpringMVC\"},{\"text\":\"SpringBatch\",\"link\":\"/SSM/SpringBatch\"}]},{\"text\":\"SpringBoot\",\"collapsed\":true,\"items\":[{\"text\":\"基础篇\",\"link\":\"/3、SpringBoot/基础篇\"},{\"text\":\"应用篇\",\"link\":\"/3、SpringBoot/应用篇\"},{\"text\":\"新特性\",\"link\":\"/3、SpringBoot/新特性\"},{\"text\":\"运维&原理\",\"link\":\"/3、SpringBoot/运维&原理\"}]},{\"text\":\"SpringCloud\",\"collapsed\":true,\"items\":[{\"text\":\"SpringCloud\",\"link\":\"/4、微服务/进阶\"},{\"text\":\"Sentinel\",\"link\":\"/4、微服务/必备/Sentinel\"}]},{\"text\":\"SpringSecurity\",\"collapsed\":true,\"items\":[{\"text\":\"SpringSecurity基础篇\",\"link\":\"/4、微服务/SpringSecurity/基础篇\"},{\"text\":\"SpringSecurity进阶篇\",\"link\":\"/4、微服务/SpringSecurity/进阶篇\"},{\"text\":\"SpringSecurity高级篇\",\"link\":\"/4、微服务/SpringSecurity/高级篇\"}]},{\"text\":\"Mybatis & MybatisPlus\",\"collapsed\":true,\"items\":[{\"text\":\"Mybatis\",\"link\":\"/Mybatis&MybatisPlus/Mybatis\"},{\"text\":\"MybatisPlus\",\"link\":\"/Mybatis&MybatisPlus/MybatisPlus\"},{\"text\":\"JPA\",\"link\":\"/Mybatis&MybatisPlus/JPA\"}]},{\"text\":\"Git & ChatGPT\",\"collapsed\":true,\"items\":[{\"text\":\"Git\",\"link\":\"/5、运维/Git\"},{\"text\":\"Github\",\"link\":\"/5、运维/Github\"},{\"text\":\"ChatGPT\",\"link\":\"/5、运维/ChatGPT\"},{\"text\":\"Jenkins\",\"link\":\"/5、运维/Jenkins\"},{\"text\":\"Netty\",\"link\":\"/5、运维/Netty\"}]},{\"text\":\"数据库\",\"collapsed\":true,\"items\":[{\"text\":\"MySQL\",\"collapsed\":true,\"items\":[{\"text\":\"MySQL基础\",\"link\":\"/2、数据库/MySQL/MySQL核心/基础\"},{\"text\":\"MySQL进阶\",\"link\":\"/2、数据库/MySQL/MySQL核心/进阶\"},{\"text\":\"MySQL优化\",\"link\":\"/2、数据库/MySQL/MySQL核心/优化\"},{\"text\":\"MySQL设计\",\"link\":\"/2、数据库/MySQL/MySQL核心/设计\"},{\"text\":\"MySQL运维\",\"link\":\"/2、数据库/MySQL/MySQL核心/运维\"},{\"text\":\"分库分表\",\"link\":\"/2、数据库/MySQL/分库分表\"}]},{\"text\":\"Redis\",\"collapsed\":true,\"items\":[{\"text\":\"Redis基础\",\"link\":\"/2、数据库/Redis/Redis基础\"},{\"text\":\"Redis优化\",\"link\":\"/2、数据库/Redis/Redis优化\"},{\"text\":\"Redis原理\",\"link\":\"/2、数据库/Redis/Redis原理\"},{\"text\":\"Redis高级\",\"link\":\"/2、数据库/Redis/Redis高级\"},{\"text\":\"Redis实战\",\"link\":\"/2、数据库/Redis/Redis实战\"},{\"text\":\"本地缓存\",\"link\":\"/2、数据库/Redis/本地缓存\"}]},{\"text\":\"MongoDB\",\"collapsed\":true,\"items\":[{\"text\":\"MongoDB基础\",\"link\":\"/2、数据库/MongoDB/基础\"},{\"text\":\"MongoDB进阶\",\"link\":\"/2、数据库/MongoDB/整合\"}]},{\"text\":\"ElasticSearch\",\"collapsed\":true,\"items\":[{\"text\":\"ES基础\",\"link\":\"/2、数据库/ElasticSearch/1、ES基础\"},{\"text\":\"ES高级\",\"link\":\"/2、数据库/ElasticSearch/3、ES高级\"}]},{\"text\":\"InfluxDB\",\"link\":\"/2、数据库/influxdb\"},{\"text\":\"Neo4j\",\"link\":\"/2、数据库/Neo4j\"}]},{\"text\":\"高并发 & 秒杀 & 分布式\",\"collapsed\":true,\"items\":[{\"text\":\"分布式理论\",\"link\":\"/三高/分布式\"},{\"text\":\"分布式锁\",\"link\":\"/4、微服务/必备/分布式锁\"},{\"text\":\"秒杀\",\"link\":\"/三高/秒杀\"},{\"text\":\"高可用\",\"link\":\"/三高/高可用\"},{\"text\":\"高并发\",\"link\":\"/三高/高并发\"}]},{\"text\":\"云原生\",\"collapsed\":true,\"items\":[{\"text\":\"Docker\",\"link\":\"/云原生/Docker\"},{\"text\":\"K8S\",\"link\":\"/云原生/K8S\"}]},{\"text\":\"可视化 & 监控\",\"collapsed\":true,\"items\":[{\"text\":\"监控基础\",\"link\":\"/可视化 & 监控/监控基础\"},{\"text\":\"监控进阶\",\"link\":\"/可视化 & 监控/监控进阶\"},{\"text\":\"可视化大屏\",\"link\":\"/可视化 & 监控/可视化大屏\"},{\"text\":\"Zabbix\",\"link\":\"/可视化 & 监控/Zabbix\"}]},{\"text\":\"学前端\",\"collapsed\":true,\"items\":[{\"text\":\"HTML+CSS\",\"collapsed\":true,\"items\":[{\"text\":\"HTML基础\",\"link\":\"/1、学前端/1、HTML+CSS/HTML基础\"},{\"text\":\"CSS基础\",\"link\":\"/1、学前端/1、HTML+CSS/CSS基础\"},{\"text\":\"网页进阶\",\"link\":\"/1、学前端/1、HTML+CSS/网页进阶\"}]},{\"text\":\"JS+TS\",\"collapsed\":true,\"items\":[{\"text\":\"JS基础\",\"link\":\"/1、学前端/2、JS+TS/JS 基础\"},{\"text\":\"JS进阶\",\"link\":\"/1、学前端/2、JS+TS/JS 进阶\"},{\"text\":\"ES6基础\",\"link\":\"/1、学前端/2、JS+TS/ES6 基础\"},{\"text\":\"ES6进阶\",\"link\":\"/1、学前端/2、JS+TS/ES6 进阶\"},{\"text\":\"TS基础\",\"link\":\"/1、学前端/2、JS+TS/TypeScript\"}]},{\"text\":\"NodeJS\",\"collapsed\":true,\"items\":[{\"text\":\"Node基础\",\"link\":\"/1、学前端/4、Node/基础篇\"},{\"text\":\"Node进阶\",\"link\":\"/1、学前端/4、Node/进阶篇\"},{\"text\":\"项目实战\",\"link\":\"/1、学前端/4、Node/项目实战\"}]},{\"text\":\"Vue\",\"collapsed\":true,\"items\":[{\"text\":\"Vue3进阶\",\"link\":\"/1、学前端/3、Vue/Vue3/Vue3进阶\"},{\"text\":\"Vue3高级\",\"link\":\"/1、学前端/3、Vue/Vue3/Vue3高级\"},{\"text\":\"Vue3新语法\",\"link\":\"/1、学前端/3、Vue/Vue3/Vue3新语法\"},{\"text\":\"项目实战\",\"link\":\"/1、学前端/3、Vue/Vue2/Vue2项目\"}]},{\"text\":\"小程序\",\"collapsed\":true,\"items\":[{\"text\":\"小程序基础\",\"link\":\"/1、学前端/5、小程序/微信小程序\"},{\"text\":\"小程序优化\",\"link\":\"/1、学前端/5、小程序/小程序优化\"},{\"text\":\"uniapp\",\"link\":\"/1、学前端/5、小程序/uniapp\"},{\"text\":\"项目实战\",\"link\":\"/1、学前端/5、小程序/小程序项目\"}]}]},{\"text\":\"计算机基础\",\"collapsed\":true,\"items\":[{\"text\":\"数据结构\",\"link\":\"/计算机基础/数据结构/基础篇\"},{\"text\":\"操作系统\",\"link\":\"/计算机基础/计算机基础/操作系统\"},{\"text\":\"设计模式\",\"link\":\"/计算机基础/设计模式/基础篇\"},{\"text\":\"计算机网络\",\"link\":\"/计算机基础/计算机网络/网络基础\"},{\"text\":\"UML\",\"link\":\"/计算机基础/设计模式/UML\"},{\"text\":\"LeetCode\",\"link\":\"/计算机基础/算法/LeetCode\"}]},{\"text\":\"项目实战\",\"collapsed\":true,\"items\":[{\"text\":\"云尚办公\",\"collapsed\":true,\"items\":[{\"text\":\"基础篇\",\"link\":\"/项目实战/云尚办公/基础篇\"}]},{\"text\":\"小兔鲜\",\"collapsed\":true,\"items\":[{\"text\":\"基础篇\",\"link\":\"/项目实战/小兔鲜/基础篇\"},{\"text\":\"进阶篇1\",\"link\":\"/项目实战/小兔鲜/进阶篇1\"},{\"text\":\"进阶篇2\",\"link\":\"/项目实战/小兔鲜/进阶篇2\"}]},{\"text\":\"地图\",\"collapsed\":true,\"items\":[{\"text\":\"基础篇\",\"link\":\"/项目实战/百度地图/基础篇\"},{\"text\":\"进阶篇\",\"link\":\"/项目实战/百度地图/进阶篇\"}]},{\"text\":\"苍穹外卖\",\"collapsed\":true,\"items\":[{\"text\":\"进阶篇\",\"link\":\"/项目实战/苍穹外卖/进阶篇\"}]},{\"text\":\"黑马头条\",\"collapsed\":true,\"items\":[{\"text\":\"基础篇\",\"link\":\"/项目实战/黑马头条/基础篇\"},{\"text\":\"进阶篇\",\"link\":\"/项目实战/黑马头条/进阶篇\"},{\"text\":\"进阶篇2\",\"link\":\"/项目实战/黑马头条/进阶篇2\"},{\"text\":\"高级篇\",\"link\":\"/项目实战/黑马头条/高级篇\"}]},{\"text\":\"支付\",\"link\":\"/项目实战/支付\"},{\"text\":\"项目推荐\",\"link\":\"/项目实战/项目推荐\"}]},{\"text\":\"团队成员\",\"link\":\"/team\"}],\"siteTitle\":\"任硕的文档\",\"logo\":\"/Vue.png\",\"nav\":[{\"text\":\"Java学前端\",\"items\":[{\"items\":[{\"text\":\"HTML+JS\",\"link\":\"/Java学前端/HTML+JS\"},{\"text\":\"CSS\",\"link\":\"/Java学前端/CSS\"},{\"text\":\"Vue2+组件\",\"link\":\"/Java学前端/Vue2+组件\"},{\"text\":\"Vue3+组件\",\"link\":\"/Java学前端/Vue3+组件\"},{\"text\":\"React\",\"link\":\"/Java学前端/React\"}]}],\"activeMatch\":\"/Java/\"},{\"text\":\"软件测试\",\"items\":[{\"items\":[{\"text\":\"测试基础\",\"link\":\"/软件测试/测试基础\"},{\"text\":\"压力测试\",\"link\":\"/软件测试/压力测试\"}]}]},{\"text\":\"多线程\",\"items\":[{\"items\":[{\"text\":\"基础篇\",\"link\":\"/并发 & 多线程/基础篇\"},{\"text\":\"进阶篇\",\"link\":\"/并发 & 多线程/并发完善\"}]}]},{\"text\":\"开发工具\",\"items\":[{\"items\":[{\"text\":\"Chrome\",\"link\":\"/IDEA/Chrome\"},{\"text\":\"IDEA基础\",\"link\":\"/IDEA/IDEA基础\"},{\"text\":\"IDEA插件\",\"link\":\"/IDEA/IDEA插件\"},{\"text\":\"VS Code\",\"link\":\"/IDEA/VS Code\"}]}]},{\"text\":\"消息中间件\",\"items\":[{\"items\":[{\"text\":\"RabbitMQ\",\"link\":\"/消息中间件/RabbitMQ\"},{\"text\":\"RocketMQ\",\"link\":\"/消息中间件/RocketMQ\"},{\"text\":\"Kafka\",\"link\":\"/消息中间件/Kafka\"},{\"text\":\"Canal\",\"link\":\"/消息中间件/Canal\"}]}]}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/renshuo123/renshuo123.github.io\"},{\"icon\":\"twitter\",\"link\":\"#\"},{\"icon\":{\"svg\":\"<svg t=\\\"1676028692954\\\" class=\\\"icon\\\" ...</path></svg>\"},\"link\":\"https://github.com/\"}]},\"locales\":{},\"scrollOffset\":90,\"cleanUrls\":false}");</script>
    
  </body>
</html>